代码之家  ›  专栏  ›  技术社区  ›  The Great

Python“mail.Send”成功,但outlook电子邮件未送达

  •  0
  • The Great  · 技术社区  · 3 年前

    我已经提到这个了 post 。请不要把它标记为重复。

    我写了下面的代码通过python发送电子邮件

    outlook = win32com.client.Dispatch('outlook.application')
    mail = outlook.CreateItem(0)
    From = outlook.Session.Accounts[1]
    mail.To = 'test@org.com'
    mail.Subject = 'Test Email'
    mail.HTMLBody = '<h3>This is HTML Body</h3>'
    mail.Body = "This is the normal body"
    mail._oleobj_.Invoke(*(64209, 0, 8, 0, From))
    mail.Send()  # successfully executed
    

    上述代码已成功执行,但电子邮件仍未送达,并且已超过15分钟。如果我使用outlook手动完成,就可以发送和接收消息。

    能帮我一下这里有什么问题吗?

    update-mail.display()如下所示

    enter image description here

    更新-邮件。发件箱中的Send()如下所示

    enter image description here

    更新-第二个邮箱出错

    enter image description here

    更新-代码

    mail = outlook.CreateItem(0)
    for acc in outlook.Session.Accounts:
        if acc.DisplayName == 'user2@org.com':
            print("hi")
            mail.SendUsingAccount = acc.DisplayName
    mail.To = 'user1@org.com'
    mail.Subject = 'Test Email'
    mail.HTMLBody = '<h3>This is HTML Body</h3>'
    mail.Body = "This is the normal body"
    mail._oleobj_.Invoke(*(64209, 0, 8, 0, mail.SendUsingAccount))
    pythoncom.CoInitialize()
    
    0 回复  |  直到 3 年前
        1
  •  1
  •   Eugene Astafiev    3 年前

    Outlook和您的代码之间的区别在于与邮件服务器的同步。Outlook可能会缓存提交的项目,并在存储与邮件服务器同步时发送这些项目。

    这个 NameSpace.SendAndReceive 方法启动对当前会话中提交的所有未送达邮件的即时传递,以及对当前配置文件中所有帐户的邮件的即时接收。 SendAndReceive 提供了与 Send/Receive All 单击时可用的命令 Tools 然后 Send/Receive 。当前配置文件中定义的所有帐户都用于 全部发送/接收 。如果需要联机连接来执行 全部发送/接收 ,根据用户偏好进行连接。

    请在 How To: Perform Send/Receive in Outlook programmatically 文章

    您还可以尝试运行以下代码:

    mail = outlook.CreateItem(0)
    for acc in outlook.Session.Accounts:
        if acc.DisplayName == 'user2@org.com':
            print("hi")
            mail.SendUsingAccount = acc.DisplayName
    mail.To = 'user1@org.com'
    mail.Subject = 'Test Email'
    mail.HTMLBody = '<h3>This is HTML Body</h3>'
    mail.Body = "This is the normal body"
    mail.Send()