使用Python中的win32com模块向多个收件人发送电子邮件

26

我正在使用win32com在我的代码完成后发送电子邮件。然而,我无法弄清楚如何将其发送给多个人。现在我只能将自己添加到抄送列表中,但不能加入收件人列表。

这是我的代码:

import win32com.client
import datetime as date

olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = 'Hi'
newMail.Body = 'Hi'
newMail.To = 'Amy'
newMail.CC = 'Bob'    
newMail.Send()

然而,如果我尝试这样做:

newMail.To = ['Amy','Bob']

发生错误:

pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, u'Microsoft Office Outlook', u'Type Mismatch: Cannot coerce parameter value. Outlook cannot translate your string.', None, 0, -2147352571), 1)

有人可以帮忙吗?

2个回答

32

尝试使用分号进行分隔:

newMail.To = 'Amy; john; sandy'
如果你在网上搜索“outlook interop createitem”,你就可以找到MailItem.To的文档,其中有解释。
更新:这不是一个Outlook脚本,而是一个使用Python的win32com模块来控制Outlook的Python脚本。我提到的文档是Outlook的COM接口的VB/C#文档(例如OlItemType可能的值的示例)。

谢谢,实际上我不知道这个模块内部发生了什么,而且我以前也没有编写过Outlook脚本。MailItem.To是Outlook中的内置函数吗?如果是的话,我认为对于大多数问题,我可以直接查看Outlook文档。 - lsheng
@Twinkle 如果这个方法有效,请接受答案,以便我们知道问题已解决。我会进一步说明答案。 - Oliver
2
如果你想让它更加动态,那么你可以尝试以下代码: newMail.To = ";".join([i for i in to if isinstance(to, list) == True]). - Naufal
如何在需要时添加特定的发件人名称? - Anuj Masand

0
将列表转换为字符串,确保在每个收件人末尾添加“;”。
newMail.To = "".join(<your_list>)

这句话不应该是 newMail.To = ";".join(<your_list>) 吗?(包括连接语句中的分号) - PyHP3D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接