在 outlook 电子邮件中嵌入表单并捕获响应
Embed form in outlook email and capture response
我正在努力帮助人们完成他们的工作。所以每天早上都需要向用户发送一封电子邮件,其中包含要 Approve/Reject... 不想发送这封电子邮件就像警告一样,告诉他们去应用程序来履行他们的职责。 电子邮件需要能够捕获他们的响应并相应地更新数据库。
选项 1: 将所有项目作为表单嵌入单个电子邮件正文中,例如...
Code - Description - radiobutton - radio button
111 ABC o Accept o Reject
222 DEF o Accept o Reject
Submit
提交时需要调用 winforms 应用程序并需要传递代码和 accept/reject 状态。我一直没能找到任何解决方案。还需要验证,确保已选择所有适当的单选按钮。有可能吗?
选项 2:我试图避免投票路线,其中每个项目都将作为单独的电子邮件发送。当用户 accept/reject 时,回复将发送到电子邮件。然后一些进程将监视该收件箱并选择 未读消息 并相应地更新数据库。使用 Microsoft.Office.Interop.Outlook 命名空间中的 MailItemClass。
var mailItem = (Outlook.MailItem)Application.CreateItem(Outlook.OlItemType.olMailItem);
mailItem.To = "some.address@server.com";
mailItem.Subject = "This is a test";
mailItem.Body = "This is the body of the message.";
mailItem.VotingOptions = "Accept; Reject;";
mailItem.Send();
我相信你所要求的是可能的,但需要付出很多努力才能实现。
对于您的方法,我假设这些电子邮件的信息来自数据库。我会编写一个宏来查询数据库并创建每封电子邮件并将其发送给相应的用户。
在每个用户的系统上,我都会有一个规则来识别这些电子邮件并调用宏来处理它们。宏将提取电子邮件的内容,将其复制到表单并将控制权传递给用户。提交按钮将验证用户的选择并将结果保存在全局变量中,然后再 return 将控制权交给宏。重新获得控制权后,宏将更新数据库。
这个宏会很大,我相信它需要维护。为了保护自己免受恶意软件的侵害,Outlook 不提供任何导入宏的简单方法。宏和表单每次更改时都必须手动导入到每个用户的系统中。除非你有技术上有能力的用户,否则访问每个系统并更新它的将是你。
我会拒绝任何需要在用户系统上编写代码的方法。
为了测试替代方法,我手动创建了这封电子邮件:
并发给了自己。当我收到电子邮件时,我按照指示采取了行动。当我收到回复时,它看起来像:
此回复的 Html 正文充满了格式信息。您可以从中提取回复,但我相信文本正文会更容易。为了创建以下内容,我从正文开始,将每个回车符 return 和换行符替换为 [CR] 和 [LF],然后添加了一些新行以使其更易于阅读。
[CR][LF][CR][LF] [CR][LF][CR][LF]From: Tony Dallimore [mailto:a.j.dallimore@MyIsp.com] [CR][LF]Sent: 25 May 2018 14:22[CR][LF]To: 'Tony Dallimore' <a.j.dallimore@MyIsp.com>[CR][LF]Subject: Test email 2[CR][LF][CR][LF] [CR][LF][CR][LF]
Please:[CR][LF][CR][LF] [CR][LF][CR][LF]
1) Click Reply within the Home tab.[CR][LF][CR][LF]
2) You may find it helpful to click Pop Out.[CR][LF][CR][LF]
3) Enter “A” in the Accept column or “R” in the Reject column of every row in the following table.[CR][LF][CR][LF]
4) Click Send.[CR][LF][CR][LF] [CR][LF][CR][LF]Code[CR][LF][CR][LF]Description[CR][LF][CR][LF]Accept[CR][LF][CR][LF]Reject[CR][LF][CR][LF]
111[CR][LF][CR][LF]ABC[CR][LF][CR][LF]A[CR][LF][CR][LF][CR][LF][CR][LF]
222[CR][LF][CR][LF]DEF[CR][LF][CR][LF][CR][LF][CR][LF]R[CR][LF][CR][LF]
333[CR][LF][CR][LF]GHI[CR][LF][CR][LF]A[CR][LF][CR][LF][CR][LF][CR][LF]
444[CR][LF][CR][LF]JKL[CR][LF][CR][LF]A[CR][LF][CR][LF] [CR][LF][CR][LF]
[CR][LF][CR][LF] [CR][LF]
您需要第二个宏来处理这些电子邮件、提取回复并更新数据库。用户的系统没有验证,但他们没有被要求做任何复杂的事情。如果你每次都得到不完整的答复就打电话和他们长篇大论,他们很快就会意识到,如果他们第一次就做对了,生活会更愉快。
我不知道从 VBA 访问您的数据库有多困难,但我认为没有其他事情特别困难。
这不是您要求的方法,但我相信这会更容易实施。更重要的是,所有代码都在您的系统上,这将使开发和维护变得更加容易。
我正在努力帮助人们完成他们的工作。所以每天早上都需要向用户发送一封电子邮件,其中包含要 Approve/Reject... 不想发送这封电子邮件就像警告一样,告诉他们去应用程序来履行他们的职责。 电子邮件需要能够捕获他们的响应并相应地更新数据库。
选项 1: 将所有项目作为表单嵌入单个电子邮件正文中,例如...
Code - Description - radiobutton - radio button
111 ABC o Accept o Reject
222 DEF o Accept o Reject
Submit
提交时需要调用 winforms 应用程序并需要传递代码和 accept/reject 状态。我一直没能找到任何解决方案。还需要验证,确保已选择所有适当的单选按钮。有可能吗?
选项 2:我试图避免投票路线,其中每个项目都将作为单独的电子邮件发送。当用户 accept/reject 时,回复将发送到电子邮件。然后一些进程将监视该收件箱并选择 未读消息 并相应地更新数据库。使用 Microsoft.Office.Interop.Outlook 命名空间中的 MailItemClass。
var mailItem = (Outlook.MailItem)Application.CreateItem(Outlook.OlItemType.olMailItem);
mailItem.To = "some.address@server.com";
mailItem.Subject = "This is a test";
mailItem.Body = "This is the body of the message.";
mailItem.VotingOptions = "Accept; Reject;";
mailItem.Send();
我相信你所要求的是可能的,但需要付出很多努力才能实现。
对于您的方法,我假设这些电子邮件的信息来自数据库。我会编写一个宏来查询数据库并创建每封电子邮件并将其发送给相应的用户。
在每个用户的系统上,我都会有一个规则来识别这些电子邮件并调用宏来处理它们。宏将提取电子邮件的内容,将其复制到表单并将控制权传递给用户。提交按钮将验证用户的选择并将结果保存在全局变量中,然后再 return 将控制权交给宏。重新获得控制权后,宏将更新数据库。
这个宏会很大,我相信它需要维护。为了保护自己免受恶意软件的侵害,Outlook 不提供任何导入宏的简单方法。宏和表单每次更改时都必须手动导入到每个用户的系统中。除非你有技术上有能力的用户,否则访问每个系统并更新它的将是你。
我会拒绝任何需要在用户系统上编写代码的方法。
为了测试替代方法,我手动创建了这封电子邮件:
并发给了自己。当我收到电子邮件时,我按照指示采取了行动。当我收到回复时,它看起来像:
此回复的 Html 正文充满了格式信息。您可以从中提取回复,但我相信文本正文会更容易。为了创建以下内容,我从正文开始,将每个回车符 return 和换行符替换为 [CR] 和 [LF],然后添加了一些新行以使其更易于阅读。
[CR][LF][CR][LF] [CR][LF][CR][LF]From: Tony Dallimore [mailto:a.j.dallimore@MyIsp.com] [CR][LF]Sent: 25 May 2018 14:22[CR][LF]To: 'Tony Dallimore' <a.j.dallimore@MyIsp.com>[CR][LF]Subject: Test email 2[CR][LF][CR][LF] [CR][LF][CR][LF]
Please:[CR][LF][CR][LF] [CR][LF][CR][LF]
1) Click Reply within the Home tab.[CR][LF][CR][LF]
2) You may find it helpful to click Pop Out.[CR][LF][CR][LF]
3) Enter “A” in the Accept column or “R” in the Reject column of every row in the following table.[CR][LF][CR][LF]
4) Click Send.[CR][LF][CR][LF] [CR][LF][CR][LF]Code[CR][LF][CR][LF]Description[CR][LF][CR][LF]Accept[CR][LF][CR][LF]Reject[CR][LF][CR][LF]
111[CR][LF][CR][LF]ABC[CR][LF][CR][LF]A[CR][LF][CR][LF][CR][LF][CR][LF]
222[CR][LF][CR][LF]DEF[CR][LF][CR][LF][CR][LF][CR][LF]R[CR][LF][CR][LF]
333[CR][LF][CR][LF]GHI[CR][LF][CR][LF]A[CR][LF][CR][LF][CR][LF][CR][LF]
444[CR][LF][CR][LF]JKL[CR][LF][CR][LF]A[CR][LF][CR][LF] [CR][LF][CR][LF]
[CR][LF][CR][LF] [CR][LF]
您需要第二个宏来处理这些电子邮件、提取回复并更新数据库。用户的系统没有验证,但他们没有被要求做任何复杂的事情。如果你每次都得到不完整的答复就打电话和他们长篇大论,他们很快就会意识到,如果他们第一次就做对了,生活会更愉快。
我不知道从 VBA 访问您的数据库有多困难,但我认为没有其他事情特别困难。
这不是您要求的方法,但我相信这会更容易实施。更重要的是,所有代码都在您的系统上,这将使开发和维护变得更加容易。