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()
我已经提到了这个 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()