Python 呼叫 Outlook 傳送郵件

2021-09-03 00:07:10 字數 3098 閱讀 2660

import win32com.client as win32

defsend_mail()

: outlook = win32.dispatch(

) mail_item = outlook.createitem(0)

# 0: olmailitem

mail_item.recipients.add(

'[email protected]'

) mail_item.subject =

'mail test'

mail_item.bodyformat =

2# 2: html format

mail_item.htmlbody =

'''hello guys.

'''mail_item.send(

)if __name__ ==

'__main__'

: send_mail(

)

如果 outlook 有多個賬號,需要選擇賬號傳送郵件,需要在**中對賬號進行判斷,**如下:

def

send_mail()

:)# choose sender account

send_account =

none

if account.displayname ==

'[email protected]'

: send_account = account

break0)

# 0: olmailitem

# mail_item.sendusingaccount = send_account not working

# the following statement performs the function instead

mail_item._oleobj_.invoke(*(

64209,0

,8,0

, send_account)

) mail_item.recipients.add(

'[email protected]'

) mail_item.subject =

'test sending using particular account'

mail_item.bodyformat =

2# 2: html format

mail_item.htmlbody =

'''hello guys.

'''mail_item.send(

)if __name__ ==

'__main__'

: send_mail(

)

這裡有點黑魔法,直接設定mail_item.sendusingaccount不會起作用,返回值是 none, 永遠從第乙個郵箱賬號傳送郵件,我使用的是 office 365 版。需要呼叫_oleobj_.invoke()方法。後面列出了參考鏈結。

本質上,這種方法是呼叫 com 元件,可以查詢微軟的開發幫助了解相關物件的屬性和方法,比如我想知道 account 的細節,就特意參考了下面這篇幫助: 。com 程式設計與語言無關。另外可以在 outlook 中 alt + f11,進入 vbe 環境,然後 f2 進入物件瀏覽器介面檢視比如下面的介面顯示了 account 的屬性和方法:

python 作為動態語言,通過 debug 獲取 com 物件資訊並不是很方便,比如下面**:

import win32com.client as win32

defprint_outlook_accounts()

:)print

(account.deliverystore.displayname)

if __name__ ==

'__main__'

: send_mail(

)

設定斷點的除錯介面:

我們只知道 account 是乙個 com object,account 包含的資訊很多都是 unknown 的。碰到這種情況,我一般用 c# 或者 vba 編寫**進行除錯。如果我需要詳細了解 account 的屬性和方法,在 office 的任何元件中,比如 excel,寫一段下面的**:

public

sub print_outlook_accounts(

)' 工具 -> 引用:新增 microsoft outook object library 引用

dim accounts as outlook.accounts

dim account as outlook.account

for each account in accounts

debug.print account.displayname

next

endsub

顯示出監視視窗,設定斷點,獲取 accounts 資訊:

在監視視窗新增變數 accounts:

展開:

item 1 和 item 2 表示有兩個賬號,現在我們想看到 item 2 的賬號資訊,將 item 2 展開:

deliverystore屬性也包含 account 的資訊,可以展開檢視。

使用Python呼叫OUTLOOK發郵件(帶附件)

前置條件 本地安裝了python,匯入了win32com pythoncom等模組。import win32com.client as win32 import warnings import sys import pythoncom reload sys sys.setdefaultencodin...

C 呼叫outlook 傳送郵件

1.這個是呼叫ie mailto 來傳送的,呼叫win api 首先要新增引用using system.runtime.interopservices class mailto 與我聯絡開啟郵箱的類 2 呼叫 ie方法 system.diagnostics.process.start mailto ...

C 呼叫 Outlook傳送郵件例項

新增引用 microsoft.office.interop.outlook using system using system.collections.generic using system.linq using system.text using system.net.mail using sy...