如何通过Outlook使用不同的发件人发送HTML邮件(win32com.client)

1 投票
2 回答
4127 浏览
提问于 2025-04-19 22:32

背景简介:

我正在写一个脚本,用来发送工作模板,但我通常是以我们团队的邮箱发送消息,这样团队成员都能看到。大部分功能都正常,但我在设置发件人地址时遇到了问题,可能是我做错了什么。通常在Outlook中,我在撰写消息时,只需从“发件人”下拉菜单中选择一个备用发件人。

哪个属性可以让我指定一个不同的发件地址?

类似这样的:

newMail.From = "mailer@my.org"

这是我正在使用的简化版本,用来发送HTML内容:

import win32com.client
olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = "the subject"
#newMail.Body = "body text"
newMail.HTMLBody  = """<a href="https://google.com">Google Link</a>"""
newMail.To = "customer@example.org"
#newMail.CC = 'Bob'
#attachment1 = "c:\\mypic.jpg"
#newMail.Attachments.Add(attachment1)
newMail.Send()

2 个回答

0

根据Outlook对象模型中的MailItem文档,你需要使用Sender属性:

这个属性可以返回或设置一个地址条目对象,它对应于发送邮件的账户用户。这个属性是可以读写的。

在备注中提到:

如果你的账户配置中有多个账户,你可以设置这个属性来指定从哪个账户发送邮件。你需要把这个属性设置为特定账户的CurrentUser属性所代表的用户的AddressEntry对象。

如果你把Sender属性设置为一个没有权限通过该账户发送邮件的AddressEntry,Outlook会报错。

所以,如果"mailer@my.org"有权限通过你的Outlook账户发送邮件,你就可以这样做;如果没有权限,那就没办法了。

在“另请参阅”部分有一个完整示例的链接(是C#的,但你应该能理解并转换)。

5

我找到了这个:

newMail.SentOnBehalfOfName = "mailer@company.com"

这让我可以通过我的用户资料,以我们的邮件列表的名义发送消息。

撰写回答