【问题标题】:Change the 'From' field in Outlook mail item更改 Outlook 邮件项目中的“发件人”字段
【发布时间】: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 中的一个条目

标签: python win32com


【解决方案1】:

我想通了: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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多