使用python上的win32com从辅助邮箱帐户发送outlook电子邮件



我遇到了一个类似的问题

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 == "marhaba@vodafone.om":
print(account)
mail = outlook.CreateItem(0)
mail._oleobj_.Invoke(*(64209, 0, 8, 0, account))
mail.To = to
mail.Subject = 'Vodafone 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中的另一个人进行发送。

因此,如果你在Outlook中配置了多个帐户,你可以使用以下代码行:

mail.SendUsingAccount  =  accounts[1]

相关内容

  • 没有找到相关文章

最新更新