【问题标题】:How to set Outlook From email address from Word VBA如何从 Word VBA 设置 Outlook 来自电子邮件地址
【发布时间】:2019-02-26 22:15:23
【问题描述】:

我正在尝试使用 Word VBA 将文档发送给电子邮件收件人。在大多数情况下,这并不难。到目前为止我有这个代码:

With oItem
    'Set the recipient for the new email
    .To = "person1@mail.com"
    'Set the recipient for a copy
    .CC = "ccperson@mail.com"
    'Set the subject
    .Subject = "Blah blah"
End With

我的问题是我在 Outlook 中配置了多个发件人电子邮件地址,而 Outlook 默认选择了错误的一个。

有没有办法使用上述方法指定发件人电子邮件地址?不用说,用于指定发件人地址 (.From = me@wherever.com) 的直观代码行不起作用。谢谢。

更新:

在使用下面 peakpeak 和 Dimitry 的建议进行修改后,我终于让我的代码工作了。我的改变是

1) 包含对 Microsoft Outlook 16 对象库的引用,以便我可以访问 Outlook.MailItem 数据类型。使用上面的代码(没有参考),邮件可以正常发送,但总是会使用错误的发件人地址发送。

2) 将邮件项声明为Outlook.MailItem。这似乎启用了SentOnBehalfOfName 字段。

3) 在SentOnBehalfOfName 字段中使用了我想要的 From: 电子邮件地址。

这是工作代码:

Dim MAPIMailItem As Outlook.MailItem
Set MAPIMailItem = olkApp.CreateItem(olMailItem)  'Create a new mail message
With MAPIMailItem
    .BodyFormat = olFormatPlain
    .to = strTo

   ' SentOnBehalfOfName sets the From field on my machine,
   ' AFTER I declared MAPIMailItem as Outlook.MailItem
    .SentOnBehalfOfName = "fromAddress@foo.com"

    .Subject = strSubject
    .body = strBody
    .attachments.Add strAtt
   '.send
    .Display
End With

【问题讨论】:

  • 你需要设置这个属性.SentOnBehalfOfName
  • 感谢您的回复,但是......这不会改变我弹出的 Outlook 消息窗口中显示的 From: 地址。这就像创建一个 Outlook 邮件项目总是使用已经存在的默认发件人地址创建项目......

标签: vba outlook ms-word email


【解决方案1】:

如果您通过 Exchange 帐户发送,请设置 MailItem.SentOnBehalfOfName 属性(假设您有权代表指定邮箱发送)。如果您通过 POP3/SMTP 帐户发送,请设置 MailItem.SendUsingAccount 属性。

【讨论】:

  • 嗨,Dimitry,很抱歉,但由于某种原因,这些字段似乎都不适用于我的代码。 Outlook 仍然会弹出在“发件人”字段中加载了错误帐户的电子邮件...
【解决方案2】:

我使用这个代码:

Dim WantedAccount as String ' Set to preferred account name
Set MAPISession = objOutlook.Application.Session     'Get the MAPI Outlook session

Set MAPIMailItem = objOutlook.CreateItem(olMailItem)  'Create a new mail message
With MAPIMailItem
  For Each Account In MAPISession.Accounts
    If Account = WantedAccount Then
      .SendUsingAccount = Account
      Exit For
    End If
  Next

【讨论】:

  • 感谢您的帮助。我正在尝试找出 MAPISessionMAPIMailItem 的数据类型,以便让 Intellisense 工作。但是我在 Word VBA 对象检查器中找不到这些对象...您能指出我在某处的正确定义吗? (我运行了你的代码,它正确地循环了我的邮件帐户,但 Intellisense 没有向我显示 .SendUsingAccount 等字段。)
  • 另外,在我使用您的代码获得正确的帐户后,设置 SendUsingAccount 字段并没有什么不同。 Outlook 仍然会弹出一封包含错误发件人地址的电子邮件...
  • 在添加对 Outlook 16 对象库的引用并使用 SentOnBehalfOfName 属性后,我终于让它工作了。耶!有关工作代码,请参阅原始帖子中的更新。答案是 peakpeak 和 Dimitry 的贡献(我想是我的)的组合,但我只能将一个标记为答案......
猜你喜欢
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 2014-02-14
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
相关资源
最近更新 更多