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)
这部分工作得很好,但它通过我自己登录的用户发送电子邮件。我宁愿从通用帐户发送它,以便它看起来更正式,并且在那里而不是在我的邮箱中收到回复。
您可以使用扩展的 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)