我遇到了问题比如这个问题
outlook = win32com.client.Dispatch('outlook.application')
accounts = win32com.client.Dispatch("outlook.Application").Session.Accounts
print(accounts[1])
mail = outlook.CreateItem(0)
mail.SentOnBehalfOfName = accounts[1]
mail.SendUsingAccount = accounts[1]
mail.To = to
mail.Subject = 'Subject TEST'
mail.HTMLBody = emailBody
mail.display()
mail.Send()
如果我评论
mail.Send()
,显示的窗口将正确显示所有内容,但如果我发送它,我会得到回复This message could not be sent. You do not have the permission to send the message on behalf of the specified user.
,这显然是不正确的,因为如果不是直接发送并从下拉列表中选择完全相同的电子邮件菜单中的“发件人”,然后单击“发送”,它将毫无问题地发送电子邮件。
因此,在@Eugene Astafiev和这篇文章的帮助下,我解决了这个问题:
outlook = win32com.client.Dispatch('outlook.application')
for account in outlook.Session.Accounts:
if account.DisplayName == "[email protected]":
print(account)
mail = outlook.CreateItem(0)
mail._oleobj_.Invoke(*(64209, 0, 8, 0, account))
mail.To = to
mail.Subject = 'Support'
mail.HTMLBody = emailBody
#mail.display()
mail.Send()
无需在 Outlook 中同时使用这两个属性:
mail.SentOnBehalfOfName = accounts[1]
mail.SendUsingAccount = accounts[1]
Outlook UI 中的“发件人”字段对应于 MailItem.SendUsingAccount 属性,该属性返回或设置一个 Account
对象,该对象代表要发送
MailItem
的帐户。当您在 Outlook 中配置了多个帐户时,此选项可用。MailItem.SentOnBehalfOfName
属性返回一个字符串,而不是 Account
实例,其中字符串指示邮件消息的预期发件人的显示名称。请注意,应获得许可才能在 Exchange 中代表其他人发送。
mail.SendUsingAccount = accounts[1]