我正在尝试使用Python启动一些Outlook 2007自动化。我从Steve Townsend那里得到了这个伟大的剧本({下文):Send Outlook Email Via Python?
但是我在开始这个时遇到了麻烦。
import win32com.client
def send_mail_via_com(text, subject, recipient, profilename="Outlook2007"):
s = win32com.client.Dispatch("Mapi.Session")
o = win32com.client.Dispatch("Outlook.Application")
s.Logon(profilename)
Msg = o.CreateItem(0)
Msg.To = recipient
Msg.CC = "moreaddresses here"
Msg.BCC = "address"
Msg.Subject = subject
Msg.Body = text
#attachment1 = "Path to attachment no. 1"
#attachment2 = "Path to attachment no. 2"
#Msg.Attachments.Add(attachment1)
#Msg.Attachments.Add(attachment2)
Msg.Send()
send_mail_via_com("test text","test subject", "removed@security.obv","Outlook2007")
但我得到以下错误:
Traceback (most recent call last):
File "C:\Python32\lib\site-packages\win32com\client\dynamic.py", line 83, in _
GetGoodDispatch
IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\PROJECTS\Python\send_mail_test.py", line 25, in <module>
send_mail_via_com("test text","test subject", "removed@security.obv","Outloo
k2007")
File "C:\PROJECTS\Python\send_mail_test.py", line 4, in send_mail_via_com
s = win32com.client.Dispatch("Mapi.Session")
File "C:\Python32\lib\site-packages\win32com\client\__init__.py", line 95, in
Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,c
lsctx)
File "C:\Python32\lib\site-packages\win32com\client\dynamic.py", line 108, in
_GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:\Python32\lib\site-packages\win32com\client\dynamic.py", line 85, in _
GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.II
D_IDispatch)
pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)
我错过了可能是愚蠢的事情。
已经安装了Python 3.2和PyWin32
非常感谢
答案 0 :(得分:11)
没关系......
import win32com.client
olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = "I AM SUBJECT!!"
newMail.Body = "I AM IN THE BODY\nSO AM I!!!"
newMail.To = "who_to_send_to@example.com"
#newMail.CC = "moreaddresses here"
#newMail.BCC = "address"
#attachment1 = "Path to attachment no. 1"
#attachment2 = "Path to attachment no. 2"
#newMail.Attachments.Add(attachment1)
#newMail.Attachments.Add(attachment2)
#newMail.display()
newMail.Send()
这适用于安装了PyWin32的Python 3.2.3。如果你想玩这个,我已经注释了一些行。
[2017年编辑] - 添加HTML电子邮件支持(如果它对任何人都很方便)
import win32com.client
#some constants (from http://msdn.microsoft.com/en-us/library/office/aa219371%28v=office.11%29.aspx)
olFormatHTML = 2
olFormatPlain = 1
olFormatRichText = 3
olFormatUnspecified = 0
olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = "I AM SUBJECT!!"
newMail.BodyFormat = olFormatHTML #or olFormatRichText or olFormatPlain
newMail.HTMLBody = "<h1>I am a title</h1><p>I am a paragraph</p>"
newMail.To = "who_to_send_to@example.com; anotherrecipient@email.fake"
# carbon copies and attachments (optional)
#newMail.CC = "moreaddresses here"
#newMail.BCC = "address"
#attachment1 = "Path to attachment no. 1"
#attachment2 = "Path to attachment no. 2"
#newMail.Attachments.Add(attachment1)
#newMail.Attachments.Add(attachment2)
# open up in a new window and allow review before send
newMail.display()
# or just use this instead of .display() if you want to send immediately
#newMail.Send()
答案 1 :(得分:1)
上面的代码也适用于Python 2.7。 原始帖子中的错误是由以下原因引起的:
s = win32com.client.Dispatch(“Mapi.Session”) Traceback(最近一次调用最后一次): 文件“”,第1行,in 发送文件“c:\ Python27 \ lib \ site-packages \ win32com \ client__init __。py”,第95行 dispatch,userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx) _GetGoodDispatchAndUserName中的文件“c:\ Python27 \ lib \ site-packages \ win32com \ client \ dynamic.py”,第108行 return(_GetGoodDispatch(IDispatch,clsctx),userName) _GetGoodDispatch中的文件“c:\ Python27 \ lib \ site-packages \ win32com \ client \ dynamic.py”,第85行 IDispatch = pythoncom.CoCreateInstance(IDispatch,None,clsctx,pythoncom.IID_IDispatch)
它曾经在Outlook 2003中运行。我想2007年根本不需要MAPI和登录。