VBA Excel - 如何使用电子邮件地址回复所有内容,而不仅仅是名称

时间:2016-11-18 19:30:05

标签: vba excel-vba outlook outlook-vba excel

我正在创建一个VBA用户表单,该表单使用模板回复活动的Outlook电子邮件(基于列表框选项的不同模板)。现在的问题是,当我回复所有"它只抓取发件人和收件人的名字和姓氏。

发件人主要在公司外面,所以我需要它来抓住并填充" To"带有实际电子邮件地址的字段。如果它只是在公司内部,那么用户将在公司目录中并且它不会成为问题。最接近我发现这是How do you extract email addresses from the 'To' field in outlook?的答案。我觉得我需要的信息在那里可用(仅明确处理收件人的抓取信息,但我认为同样的原则将适用于发件人),但我无法理解如何将其插入我的代码中期望的结果。

这是我的开始:

Private Sub CommandButton1_Click()

Dim origEmail As MailItem
Dim replyEmail As MailItem

Set origEmail = ActiveExplorer.Selection(1)
Set replyEmail = CreateItemFromTemplate("C:\Download Tool\Need Stat Code X.oft")

replyEmail.To = origEmail.ReplyAll.To

replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
replyEmail.SentOnBehalfOfName = "emailaddress@mycompany.com"
replyEmail.Display

Set origEmail = Nothing
Set replyEmail = Nothing

End Sub 

电子邮件正在填充,我几乎可以得到我想要的所有信息,但我还没有找到关于如何获取和获取信息的清晰解释。插入电子邮件地址。

感谢您的时间和建议!

2 个答案:

答案 0 :(得分:0)

如果您在“设置origEmail = ...”之后停止并在origEmail上设置监视,您将看到该电子邮件的属性。包括收件人集合。有两种(我可以看到)类型,SMTP和EX。对我来说,EX意味着内部。在收件人项目中的每个项目中都有一个名为address的属性,另一个名为addressentry。 addressentry部分包含地址类型。

深呼吸

好的,所以你需要能够通过解析最后的部分将EX地址转换成内部地址,我想你可以按原样放入SMTP地址。在收件人地址列表中构建一串地址,并将其放在“收件人”和/或“抄送”字段中,您应该很好。 To或CC部分是recipients(n).type property ...

我想。

天哪,我希望有人发布更简单的方法:)

答案 1 :(得分:0)

感谢@hrothgar和@Tony的回复。我从每个人那里学到了一些新的工具和技术。最终,根据您的回复中找到的信息,我最终搜索了" vba get recipients string"并找到Get item.recipient with Outlook VBA

现在代码可以正常工作,如下所示:

Private Sub CommandButton1_Click()

Dim origEmail As MailItem
Dim replyEmail As MailItem

'new stuff
Dim recip As Recipient
Dim allRecips As String
'end new stuff

Set origEmail = ActiveExplorer.Selection(1)
Set replyEmail = CreateItemFromTemplate("C:\Template Placel\My Template.oft")

'more new stuff
For Each recip In origEmail.Recipients
If (Len(allRecips) > 0) Then allRecips = allRecips & "; "
allRecips = allRecips & recip.Address
Next
'end more new stuff

replyEmail.To = origEmail.SenderEmailAddress & "; " & allRecips 'updated to find sender email and 

replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
replyEmail.SentOnBehalfOfName = "inbox@company.com"
replyEmail.Display

Set origEmail = Nothing
Set replyEmail = Nothing

End Sub

" To"内部联系人看起来有点难看。但我已经过测试,它完成了工作。

感谢您的帮助!