2014-06-12 127 views
3

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

尝试类似msg.From = "[email protected]"返回AttributeError: Property 'CreateItem.From' can not be set.

有什么办法可以在不使用SMTP的情况下完成此操作吗?即使只是更改标题以将通用帐户反映为“发件人”和“回复地址”,也是可行的。

编辑:使用的Win7 32位,展望2010年,蟒蛇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

嗨@Yann,我已经编辑我原来的注释,以包括更多的信息,我使用的代码的样本。我不确定你在循环中使用字符串变量的建议;我的问题是,它似乎没有可以根本改变发件人地址。 – caseodilla

+0

我会使用内部的python电子邮件库来代替。如果你想发送电子邮件,这完美的工作。 – Jonathan

+0

@Jonathan你可以扩展你的建议吗? – caseodilla

回答

1

您可以通过交换使用扩展mapi发送邮件。它需要比迄今为止尝试的更多的努力,但它非常强大,例如它允许选择要使用的Outlook配置文件。 查看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) 
+0

感谢您的反馈,@Christian K. – caseodilla

+0

我已经搞砸了扩展MAPI了一下。我甚至可以选择我发送邮件的配置文件,但它仍然会从我的用户配置文件地址发送。我会进一步阅读你链接的信息,看看我错过了什么。 – caseodilla

+0

我还强制将最后一个CDO安装到我的Outlook 2010环境中。 – caseodilla

相关问题