ol = win32com.client.Dispatch('Outlook.Application')
olmailitem = 0x0
newmail = ol.CreateItem(olmailitem)
newmail.Subject = "Hold Notifier " + row['Ticket ID'] +" | "+ row['N/W Customer Number']+" |"+row['Circuit ID']+" | "+row['Customer Name']+" | "+row['Ticket Priority']+" | "+row['Ticket Region']
newmail.To = 'XXXXXXX@gmail.com'
newmail.CC = 'XXXXX@outlook.com;XXXXXX@gmail.com'
newmail.Body= 'Hello, this is a test email to showcase how to send emails from Python and Outlook.'
newmail.Send()
上面的代码在我办公室的笔记本电脑上运行良好。但后来他们给我分配了相同id的桌面,注册后我的代码停止工作了。有什么问题?
上面的代码没有给出任何错误,但它不发送邮件。
Outlook可能会在邮件发送前关闭。如果要确保邮件被发送出去,则需要等待,直到邮件被放置到Outlook中的"已发送邮件"文件夹中。在此之前,Outlook.exe进程可能被终止。在Outlook中的Sent Items文件夹上设置ItemAdd
事件处理程序,并等待,直到该项目被放置在那里,以确保该项目已发送出去。
另一个可能的原因是安全问题。从外部应用程序自动化Outlook时可能会遇到安全问题。为了处理安全的Application
对象和整个Outlook对象模型,您需要开发一个COM外接程序,它可以与主机应用程序一起运行。在这种情况下,您可以使用标准的。net框架技术将两个应用程序连接在一起,例如,。net远程等。
为避免安全问题,您可以:
- 使用一个低级API,它不会触发Outlook - Extended MAPI中的问题/对话框或任何第三方包装器,如Redemption。
- 使用第三方组件在Outlook中抑制此类问题/对话框,例如,参见https://www.add-in-express.com/outlook-security/index.php。
- 开发一个COM外接程序,它可以访问可信的
Application
对象。 - 安装任何带有最新更新的AV。
- 使用GPO设置不触发安全问题/对话框的设置。
在"一个程序正试图以您的名义发送电子邮件"中了解更多信息。Outlook文章中的警告。