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

问题描述 投票:0回答:2

我遇到了问题比如这个问题

        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.
,这显然是不正确的,因为如果不是直接发送并从下拉列表中选择完全相同的电子邮件菜单中的“发件人”,然后单击“发送”,它将毫无问题地发送电子邮件。

python python-3.x outlook win32com office-automation
2个回答
3
投票

因此,在@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()

0
投票

无需在 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]

	
© www.soinside.com 2019 - 2024. All rights reserved.