簡體   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