Python - 使用 pywin32 从不同地址发送 Outlook 电子邮件

cas*_*lla 5 python email account pywin32 outlook-2010

我有一个可以通过 pywin32 成功创建和发送 Outlook 电子邮件的工作脚本,但我想从不同的通用帐户发送电子邮件。如果有帮助,我可以访问这个通用帐户(和密码),甚至可以在 Outlook 中同时打开邮箱。

尝试类似的东西msg.From = "generic@email.com"返回AttributeError: Property 'CreateItem.From' can not be set.

有没有办法在不使用 SMTP 的情况下实现这一点?即使只是更改标题以反映通用帐户,因为 From 和 Reply-To 地址也可以使用。

编辑:使用 Win7 32bit、Outlook 2010、python 2.7 和 pywin32 模块创建以下代码:

from win32com.client import Dispatch
mailer = Dispatch("Outlook.Application")
msg = mailer.CreateItem(0)
msg.To = emailTo
msg.CC = emailCC
msg.Subject = emailSubject
msg.Body = emailBody
msg.Send()
Run Code Online (Sandbox Code Playgroud)

这部分工作得很好,但它通过我自己登录的用户发送电子邮件。我宁愿从通用帐户发送它,以便它看起来更正式,并且在那里而不是在我的邮箱中收到回复。

Chr*_* K. 3

您可以使用扩展的 mapi 通过 Exchange 发送邮件。它比您到目前为止所尝试的要花费更多的精力,但它非常强大,例如,它允许选择要使用的 Outlook 配置文件。查看 pywin32 安装的 site-packages\win32comext\mapi\demos\mapisend.py 。

编辑:

正如评论中所述,请尝试以下操作以确保 Outlook 使用您想要的配置文件。寻找这一行:

session = mapi.MAPILogonEx(0, MAPIProfile, None, mapi.MAPI_EXTENDED |
                           mapi.MAPI_USE_DEFAULT)
Run Code Online (Sandbox Code Playgroud)

并将其更改为

session = mapi.MAPILogonEx(0, MAPIProfile, None, mapi.MAPI_EXTENDED |
                           mapi.MAPI_LOGON_UI)
Run Code Online (Sandbox Code Playgroud)

像这样调用 SendEMAPIMail:

SendEMAPIMail(SendSubject, SendMessage, SendTo, MAPIProfile=None)
Run Code Online (Sandbox Code Playgroud)

应出现一个对话框,供您选择 Outlook 配置文件。

编辑:

正如 @caseodilla 所发现的,如果 Outlook 正在使用另一个配置文件运行,MAPILogonEx 似乎会重用正在运行的会话及其配置文件。为了强制mapi使用另一个配置文件,添加MAPI_NEW_SESSION标志:

session = mapi.MAPILogonEx(0, MAPIProfile, None, mapi.MAPI_EXTENDED |
                           mapi.MAPI_LOGON_UI | mapi.MAPI_NEW_SESSION)
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的澄清。然而,一旦我实施了您建议的更改,它就会继续从我的个人资料中发送。经过一番修改后,我想通了一些事情。如果 Outlook 已在运行,则无论我编码了哪个配置文件,它**始终**从该活动配置文件发送。这是个好消息,因为在新配置文件下重新启动 Outlook 并不是一个巨大的障碍,而且仍然可行,但如果有办法保持 _my_ 配置文件打开并从不同地址发送代码,我仍然感兴趣。您的意见非常有帮助! (2认同)