更改 Outlook 邮件项目中的 'From' 字段
Change the 'From' field in Outlook mail item
我正在尝试自动发送群发电子邮件,需要更改 Outlook 中的 'From' 字段。电子邮件不能 'Sent on Behalf of' per compliance reasons. When I attempted this solution,我收到以下错误...
pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)
此错误引用了 mail._oleobj_.Invoke(*(64209, 0, 8, 0, email_from))
行。代码片段如下。让我知道我做错了什么或者是否有更好的方法。
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
会抛出相同的错误。感谢任何进一步的帮助
谢谢!!
我是这样想出来的:Python - Reveal a COM object。在 for
方法中,它不是 outlook.Session.Accounts
,而是 outlook.GetNamespace('MAPI').Accounts
,如下所示:
for account in outlook.GetNamespace('MAPI').Accounts:
if str(account) == 'the_e-mail_in_question':
email_from = account
break
mail = outlook.CreateItem(0)
mail._oleobj_.Invoke(*(64209, 0, 8, 0, email_from))
mail.To = to
mail.CC = cc
mail.Subject = subject
mail.HTMLbody = body
mail.Display(True)
我正在尝试自动发送群发电子邮件,需要更改 Outlook 中的 'From' 字段。电子邮件不能 'Sent on Behalf of' per compliance reasons. When I attempted this solution,我收到以下错误...
pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)
此错误引用了 mail._oleobj_.Invoke(*(64209, 0, 8, 0, email_from))
行。代码片段如下。让我知道我做错了什么或者是否有更好的方法。
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
会抛出相同的错误。感谢任何进一步的帮助
谢谢!!
我是这样想出来的:Python - Reveal a COM object。在 for
方法中,它不是 outlook.Session.Accounts
,而是 outlook.GetNamespace('MAPI').Accounts
,如下所示:
for account in outlook.GetNamespace('MAPI').Accounts:
if str(account) == 'the_e-mail_in_question':
email_from = account
break
mail = outlook.CreateItem(0)
mail._oleobj_.Invoke(*(64209, 0, 8, 0, email_from))
mail.To = to
mail.CC = cc
mail.Subject = subject
mail.HTMLbody = body
mail.Display(True)