我有一个可以通过pywin32成功创建和发送Outlook电子邮件的工作脚本,但我想从另一个通用帐户发送电子邮件。我可以访问这个通用帐户(和密码),甚至可以在Outlook中同时打开邮箱,如果这有帮助的话。
尝试msg.From = "generic@email.com"
之类的内容会返回AttributeError: Property 'CreateItem.From' can not be set.
。
有没有办法在不使用SMTP的情况下完成此操作?即使只是更改标题以反映通用帐户作为发件人和回复地址也可以。
编辑:使用Win7 32位,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()
这部分工作得很好,但它通过我自己登录的用户发送电子邮件。我宁愿从一般帐户发送它,以便它看起来更正式,并且在那里而不是在我的邮箱中收到回复。
答案 0 :(得分:1)
您可以使用扩展的mapi通过交换发送邮件。它比你到目前为止所做的努力需要更多的努力,但它非常强大,例如它允许选择要使用的外观配置文件。 看看你的pywin32安装的site-packages \ win32comext \ mapi \ demos \ mapisend.py。
编辑:
如评论中所述,请尝试以下操作以确保Outlook正在使用您想要的配置文件。寻找这一行:
session = mapi.MAPILogonEx(0, MAPIProfile, None, mapi.MAPI_EXTENDED |
mapi.MAPI_USE_DEFAULT)
并将其更改为
session = mapi.MAPILogonEx(0, MAPIProfile, None, mapi.MAPI_EXTENDED |
mapi.MAPI_LOGON_UI)
像这样调用SendEMAPIMail:
SendEMAPIMail(SendSubject, SendMessage, SendTo, MAPIProfile=None)
将出现一个对话框,提供选择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)
答案 1 :(得分:1)
我知道来晚了,但这是我设法完成这项工作的另一种方式。这样,我就可以使用Outlook中的非默认电子邮件地址发送电子邮件了:
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.Subject = "Test subject"
mail.To = "yourrecipient@gmail.com"
# If you want to set which address the e-mail is sent from.
# The e-mail needs to be part of your outlook account.
From = None
for myEmailAddress in outlook.Session.Accounts:
if "@gmail.com" in str(myEmailAddress):
From = myEmailAddress
break
if From != None:
# This line basically calls the "mail.SendUsingAccount = xyz@email.com" outlook VBA command
mail._oleobj_.Invoke(*(64209, 0, 8, 0, From))
mail.Send()