繁体   English   中英

使用 Outlook 2016 通过 Python 发送电子邮件而不打开它

[英]Send email through Python using Outlook 2016 without opening it

import win32com.client as win32

outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'To address'
mail.Subject = 'Message subject'
mail.Body = 'Message body'
mail.HTMLBody = '<h2>HTML Message body</h2>' #this field is optional

# To attach a file to the email (optional):
attachment  = "Path to the attachment"
mail.Attachments.Add(attachment)

mail.Send()

上面的代码工作得很好。 但问题是需要在系统上打开Outlook并登录,然后才发送邮件。

有没有什么方法可以使用 Outlook 发送邮件而不实际在系统上运行 Outlook 应用程序?

您需要使用 Outlook REST API 而不自动化 Outlook。 看看以下示例:

请注意,Microsoft 目前不推荐也不支持任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)的 Microsoft Office 应用程序自动化,因为 Office 可能表现出不稳定Office 在此环境中运行时出现的行为和/或死锁。

如果您正在构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。 或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。 如果您使用服务器端解决方案中的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。 此外,您将承担整体解决方案稳定性的风险。 Office 服务器端自动化的注意事项文章中阅读有关此内容的更多信息。

问题是消息提交是异步的,并且您的代码在消息发送之前就退出了。 如果是 Exchange,请尝试关闭缓存模式 - 在线商店将立即发送消息。 否则(缓存的 Exchange 或 PST 存储),您需要保留 Outlook 对象,直到邮件实际提交。 您需要等待SyncObject.SyncEnd事件触发。 SyncObject可以从Namespace.SyncObjects集合中检索(“所有帐户”是该集合中的第一项)。

暂无
暂无

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

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