如何从特定帐户发送邮件?

时间:2019-10-03 14:49:15

标签: outlook outlook-vba

我正在使用Office 365(Outlook版本1909内部版本12026.20264)。

我配置了两个电子邮件帐户(a@a.com和b@b.com)和一个共享邮箱(shared@b.com)。

使用我的b@b.com帐户,我有权从shared@b.com发送电子邮件。

我可以从所有帐户(a @ a.com,b @ b.com,shared @ b.com)手动发送电子邮件。

我有VBA代码,可以使用SentOnBehalfOfName属性从shared@b.com发送电子邮件。

Sub TEST()
  Dim origEmail As MailItem
  Dim replyEmail As MailItem

  Set origEmail = Application.ActiveWindow.Selection.Item(1)
  Set replyEmail = Application.CreateItemFromTemplate("C:\...\Template.oft")

  replyEmail.SentOnBehalfOfName = "shared@b.com"
  replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
  replyEmail.Subject = "RE:" + origEmail.Subject

  replyEmail.Display
End Sub

通常,这可以正确发送电子邮件。我可以看到他们进入了b@b.com帐户中的已发送文件夹。

有时,它尝试使用a@a.com帐户发送电子邮件(该帐户无权从shared@b.com发送电子邮件)。我在a@a.com上收到一封错误电子邮件,并且该电子邮件未发送。

如何更改代码,以便每次我从shared@b.com发送电子邮件时,都会使用我的b@b.com帐户?

注意:我将b@b.com帐户设置为默认帐户。

1 个答案:

答案 0 :(得分:1)

您需要将SendUsingAccount属性设置为与b@b.com邮箱相对应的Account对象。

Sub TEST()
  Dim origEmail As MailItem
  Dim replyEmail As MailItem

  Set origEmail = Application.ActiveWindow.Selection.Item(1)
  Set replyEmail = Application.CreateItemFromTemplate("C:\...\Template.oft")

  for each acc in Application.Session.Accounts
    if acc.DisplayName = "b@b.com" Then 
      replyEmail.SendUsingAccount = acc
      Exit for
    End If
  next 

  replyEmail.SentOnBehalfOfName = "shared@b.com"
  replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
  replyEmail.Subject = "RE:" + origEmail.Subject

  replyEmail.Display
End Sub