在Outlook电子邮件中嵌入表单并捕获回复

时间:2018-05-24 16:37:49

标签: outlook-vba outlook-2007

我正在努力帮助人们完成自己的工作。因此,每天早上都需要向用户发送一封电子邮件,其中包含批准/拒绝的列表... 不要像发出警告那样发送此电子邮件,告诉他们去应用程序执行他们的职责。电子邮件需要能够捕获他们的响应并相应地更新数据库。

选项1:将所有项目嵌入到单个电子邮件正文中作为表单,例如......

Code - Description  - radiobutton - radio button 

111  ABC  o Accept  o Reject
222  DEF  o Accept  o Reject

Submit

在提交时需要调用winforms应用程序并需要传递代码并接受/拒绝状态。我找不到任何想出办法的东西。还需要验证,确保选择了所有适当的单选按钮。它甚至可能吗?

选项2: 我正在尝试避免投票路线,其中每个项目将作为单独的电子邮件发送。当用户接受/拒绝时,回复将转到电子邮件。然后,某个进程将监视该收件箱并选择未读取消息并相应地更新DB。使用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();

1 个答案:

答案 0 :(得分:1)

我相信你所要求的是可能的,但要付出很多努力。

对于您的方法,我假设这些电子邮件的信息来自数据库。我会编写一个宏来询问数据库并创建每个电子邮件并将其发送给相应的用户。

在每个用户的系统上,我会有一个识别这些电子邮件的规则并调用一个宏来处理它们。宏将提取电子邮件的内容,将其复制到表单并将控制权传递给用户。在将控制权返回给宏之前,“提交”按钮将验证用户的选择并将结果保存在全局变量中。在重新获得控制权时,宏将更新数据库。

这个宏很大,我相信它需要维护。为了保护自己免受恶意软件的侵害,Outlook不提供任何简单的导入宏的方法。每次更改时,都必须手动将宏和表单导入每个用户的系统。除非您拥有技术能力强的用户,否则您将访问每个系统并对其进行更新。

我会拒绝任何需要用户系统代码的方法。

为了测试替代方法,我手动创建了这封电子邮件:

Original email

并将其发送给自己。当我收到电子邮件时,我按照指示行动。当我收到回复时,它看起来像是:

Reply to original email

此回复的Html正文中包含格式化信息。你可以从中提取回复,但我相信文本正文会更容易。为了创建以下内容,我开始使用文本正文,用[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访问您的数据库有多困难,但我不相信其他任何事情都特别困难。

这不是您要求的方法,但我相信这将更容易实施。更重要的是,所有代码都在您的系统上,这将使开发和维护变得更加容易。