【发布时间】:2021-09-22 16:23:11
【问题描述】:
我正在尝试自动发送大量电子邮件,并且需要更改 Outlook 中的“发件人”字段。由于合规原因,电子邮件不能是'Sent on Behalf of'。当我尝试this solution 时,收到以下错误...
pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)
此错误引用mail._oleobj_.Invoke(*(64209, 0, 8, 0, email_from)) 行。代码 sn-p 如下。让我知道我有什么问题或者是否有更好的方法。
to = 'jsmith@external_domain.com'
cc = 'my_group_e-mail@my_domain.com'
subject = personalized_subject_from_data_source
body = f'''personalized body from other data source with a {table}'''
outlook = win32.Dispatch('outlook.application')
# adding the code suggested by h0r53:
email_from = None
for account in outlook.Session.Accounts:
if account.DisplayName == 'why_i_asked_email@my_domain.com':
email_from = account
break
mail = outlook.CreateItem(0)
# email_from = 'why_i_asked_email@my_domain.com'
mail._oleobj_.Invoke(*(64209, 0, 8, 0, email_from))
mail.To = to
mail.CC = cc
mail.Subject = subject
mail.HTMLbody = body
mail.Display(True)
编辑
添加 h0r53 建议的代码后,我仍然收到相同的错误。变量account 被列为<COMObject <unknown>>,因此永远不会满足逻辑门,当for 迭代完成时,email_from == None 会引发相同的错误。任何进一步的帮助表示赞赏
谢谢!!
【问题讨论】:
-
email_from可能根本不应该是String,而是代表域用户的对象。在您引用的解决方案中,email_from变量不是字符串,而是outlook_app.Session.Accounts中的一个条目