繁体   English   中英

Python client.Dispatch("outlook.application") 在特定情况下失败(@company 电子邮件)

[英]Python client.Dispatch("outlook.application") fails in specific case (@company emails)

你好呀,

一切正常,除了一件事我无法向具有非标准电子邮件的客户发送电子邮件(如果他们的电子邮件是@gmail、@outlook 等,它会正常发送电子邮件)

我有一个客户使用以下电子邮件 client@company.com(显然不是真正的电子邮件),我无法将该电子邮件发送给他。 这是我的方法。 我很想得到一些帮助。

邮件.发送()

发送 pywintypes.com_error 中的文件“”第 2 行:(-2147024809,'参数不正确。',无,无)

def main_send_email(self, to, header, attached_msg, pdf_files=None):
    import pythoncom
    # return super().main_send_email(to, header, attached_msg, pdf_files)
    self.outlook_app = client.Dispatch(
        'outlook.application', pythoncom.CoInitialize())
    s = client.Dispatch("Mapi.Session")
    mail = self.outlook_app.CreateItem(0)

    # set the account
    account = None
    for acc in mail.Session.Accounts:
        if "39" in acc.DisplayName:
            account = acc
    mail._oleobj_.Invoke(*(64209, 0, 8, 0, account))
    # mail.SendUsingAccount = self.outlook_app.Session.Accounts.Item(1)
    # set email sender
    # mail.To = 'silsilinhas@gmail.com'
    mail.To = to
    mail.Subject = header
    mail.HTMLBody = attached_msg
    if pdf_files is not None:
        for pdf in pdf_files:
            mail.Attachments.Add(pdf)
    mail.Send()

首先,我注意到以下代码行是无用且从未使用过的:

s = client.Dispatch("Mapi.Session")

如果您自动化 Outlook,似乎不需要在代码中创建新的 MAPI 会话。

其次,当从外部应用程序自动化 Outlook 时, Send方法可能会触发安全问题。 它可以是安全提示,也可以只是运行时抛出的异常。 有几种方法可以抑制此类提示/问题:

  • 使用第三方组件来抑制 Outlook 安全警告。 有关详细信息,请参阅Microsoft Outlook 安全管理器

  • 使用不会触发此类问题/提示的低级 API 而不是 OOM。 或围绕该 API 的任何其他第三方包装器,例如 Redemption。

  • 开发一个可以访问受信任的Application对象的 COM 加载项。 然后使用标准 .Net 工具(远程处理)从独立应用程序与加载项进行通信。

  • 使用组策略对象来设置机器不会引发此类问题。

  • 安装最新的 AV 软件。

第三,您可以尝试使用Recipients集合设置邮件项目的收件人,该集合提供了Resolve方法,该方法尝试根据通讯簿解析Recipient对象。 如何:以编程方式填写 Outlook 中的收件人、抄送和密件抄送字段一文中了解更多信息。

在我编写的程序中,每当我在调用 mail.Display() 之前尝试使用 mail.Send() 时,都会发现错误“(-2147024809,'参数不正确',无,无)”。

似乎相当一致,但无法解释为什么! 希望这会有所帮助(对不起,如果没有!)

...
if pdf_files is not None:
       for pdf in pdf_files:
          mail.Attachments.Add(pdf)
mail.Display()  ##this line here  
mail.Send()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM