我为我的Microsoft 365商业帐户设置了一个自定义域(“ @ company.com”是自定义域,它实际上是“ @ company.onmicrosoft.com”)。除了“ @ company.com”帐户外,我还有另外两个帐户,它们通过“ @ yahoo.com”,“ @ gmail.com”之类的其他邮件服务器)
我创建了一个VBA子程序来发送电子邮件,并根据需要使用.SendUsingAccount发送不同的帐户。该功能按“ @ yahoo.com”,“ @ gmail.com”帐户的广告方式工作,但是当我要选择“ @ Company.com”(默认)帐户时,该帐户基本上是“ @ company.onmicrosoft.com” ”帐户,它将选择紧随其后的“ @ yahoo.com”帐户。
这里是代码:
For i = 1 To OlApp.Session.Accounts.Count
If OlApp.Session.Accounts.Item(i).SmtpAddress = "[email protected]" Then AccNo = i
' Debug.Print "Acc name: " & OlApp.Session.Accounts.Item(i) & " Acc number: " & i & " , email: " & OlApp.Session.Accounts.Item(i).SmtpAddress
Next i
Set objOlAccount = OlApp.Session.Accounts.Item(i)
Set OlMail = OlApp.CreateItem(olMailItem)
Set OlMail.SendUsingAccount = objOlAccount
[当我运行Debug.Print时,我看到i = 1的“ [email protected]帐户,i = 2的” @ yahoo.com“帐户,i = 3的” @ Gmail.com“帐户。
我什至强迫选择:设置objOlAccount = OlApp.Session.Accounts.Item(1),但我的“ @ yahoo.com”帐户仍用于发送电子邮件。
有人知道如何将发送帐户设置为我的“ @ company.com”(“ @ company.onmicrosft.com”)帐户吗?
Set objOlAccount = OlApp.Session.Accounts.Item(i)
应该是
Set objOlAccount = OlApp.Session.Accounts.Item(AccNo)
可能会更好:
For i = 1 To OlApp.Session.Accounts.Count
If OlApp.Session.Accounts.Item(i).SmtpAddress = "[email protected]" Then
Set objOlAccount = OlApp.Session.Accounts.Item(i)
Exit For
End If
Next i
If Not objOlAccount Is Nothing then
Set OlMail = OlApp.CreateItem(olMailItem)
Set OlMail.SendUsingAccount = objOlAccount
End If
如果您通过Outlook中的Exchange帐户发送邮件,它将始终使用该帐户的默认SMTP地址。
要解决此问题,您需要使用直接SMTP发送(如果使用的是代理地址之一,它将保留正确的发件人地址)。在最终用户级别,您可以使用Proxy Manager.
之类的实用程序如果只是“ @ company.com”与“ @ company.onmicrosoft.com”的问题,则需要在Exchange管理控制台中将“ @ company.com”地址设置为默认地址。