Python `mail.Send` 成功但 outlook 电子邮件未送达

Python `mail.Send` successful but outlook email not delivered

我已经提到了这个 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 手动操作,我可以发送和接收消息。

能帮我看看这是什么问题吗?

更新 - mail.display() 如下所示

更新 - mail.Send() 在发件箱中如下所示

更新 - 第二个邮箱错误

更新-代码

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()

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

NameSpace.SendAndReceive 方法会立即发送所有在当前会话中提交的未发送邮件,并立即接收当前配置文件中所有帐户的邮件。 SendAndReceive 提供了与 Send/Receive All 命令等效的程序,当您单击 Tools,然后单击 Send/Receive 时,该命令可用。 Send/Receive All 中使用了当前配置文件中定义的所有帐户。如果需要在线连接才能执行 Send/Receive All,将根据用户偏好进行连接。

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()