簡體   English   中英

嘗試使用Python從Outlook 2007發送郵件(win32com.client)

[英]Trying to send a mail from Outlook 2007 using Python (win32com.client)

我正在嘗試使用Python啟動一些Outlook 2007自動化。 我在以下線程上從Steve Townsend得到了一個很棒的腳本(下): 通過Python發送Outlook電子郵件嗎?

但我在開始時遇到了麻煩。

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

非常感謝

沒關系...

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()

上面的代碼也適用於Python 2.7。 原始帖子中的錯誤是由以下原因引起的:

s = win32com.client.Dispatch(“ Mapi.Session”)追溯(最近一次調用):文件“”,第1行,位於文件“ c:\\ Python27 \\ lib \\ site-packages \\ win32com \\ client__init __。py”中,第95行,在Dispatch調度中,userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)文件“ c:\\ Python27 \\ lib \\ site-packages \\ win32com \\ client \\ dynamic.py”,第108行,在_GetGoodDispatchAndUserName中返回(_GetGoodDispatch( IDispatch,clsctx),用戶名)文件“ c:\\ Python27 \\ lib \\ site-packages \\ win32com \\ client \\ dynamic.py”,第85行,在_GetGoodDispatch中IDispatch = pythoncom.CoCreateInstance(IDispatch,None,clsctx,pythoncom.IID_IDispatch)

它曾經在Outlook 2003中工作。我想2007根本不需要MAPI和登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM