Python3 發(fā)送郵件

Python3 發(fā)送郵件

使用第三方庫 yagmail


更新: 第三種方式的隱藏用戶名和密碼的方式红且,目前不再支持


簡單介紹

目標(biāo)是盡可能簡單邑茄,無痛地發(fā)送電子郵件漩怎。

最終的代碼如下:

import yagmail
yag = yagmail.SMTP()
contents = ['This is the body, and here is just text http://somedomain/image.png',
            'You can find an audio file attached.', '/local/path/song.mp3']
yag.send('to@someone.com', '郵件標(biāo)題', contents)

或者在一行中實現(xiàn):

yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', 'This is the body')

當(dāng)然, 以上操作需要從你自己系統(tǒng)的密鑰環(huán)中讀取你的郵箱賬戶和對應(yīng)的密碼糊秆。關(guān)于密鑰環(huán)稍后會提到如何實現(xiàn)鹏往。

安裝模塊

pip3 install  yagmail  # linux / Mac

pip install   yagmail    # windows

這樣會安裝最新的版本,并且會支持所有最新功能覆旱,主要是支持從密鑰環(huán)中獲取到郵箱的賬戶和密碼蘸朋。

關(guān)于賬戶和密碼

開通自己郵箱的 SMTP 功能,并獲取到授權(quán)碼

這個賬戶是你要使用此郵箱發(fā)送郵件的賬戶扣唱,密碼不是平時登錄郵箱的密碼藕坯,而是開通 POP3/SMTP 功能后設(shè)置的客戶端授權(quán)密碼。

這里以 126 郵箱為例:

image
image
image


方式一:不使用系統(tǒng)的密鑰環(huán)

不使用系統(tǒng)的密鑰環(huán)画舌,可以直接暴露賬戶和密碼在腳本里

import yagmail
yag = yagmail.SMTP(
            user='自己的賬號',
            password='賬號的授權(quán)碼',
            host='smtp.qq.com',  # 郵局的 smtp 地址
            port='端口號',       # 郵局的 smtp 端口
            smtp_ssl=False)

yag.send(to='收件箱賬號',
         subject='郵件主題',
         contents='郵件內(nèi)容')

方式二: 使用系統(tǒng)的密鑰環(huán)管理賬戶和授權(quán)碼

模塊支持從當(dāng)前系統(tǒng)環(huán)境中的密鑰環(huán)中獲取賬戶和密碼堕担,要想實現(xiàn)這個功能,需要依賴模塊 keyring曲聂。之后把賬戶和密碼注冊到系統(tǒng)的密鑰環(huán)中即可實現(xiàn)霹购。

1. 安裝依賴模塊

pip3 install  keyring 

# CentOS7.3 還需要安裝下面的模塊
pip3 install keyrings.alt

2. 開始向密鑰環(huán)注冊

import yagmail
yagmail.register('你的賬號', '你的授權(quán)密碼')

注冊賬戶和密碼,只需要執(zhí)行一次即可朋腋。

3. 發(fā)送郵件

import yagmail

yag = yagmail.SMTP('自己的賬號',
            host='smtp.qq.com',  # 郵局的 smtp 地址
            port='端口號',       # 郵局的 smtp 端口
            smtp_ssl=False  # 不使用加密傳輸
)

yag.send(
    to='收件箱賬號',
    subject='郵件主題',
    contents='郵件內(nèi)容')


示例展示

下面是以我的 126 郵箱為例, 使用系統(tǒng)密鑰環(huán)的方式齐疙,向我的 163郵箱發(fā)送了一封郵件。

import yagmail

yag = yagmail.SMTP(user='shark@126.com',
                   host='smtp.126.com',
                   port=25,
                   smtp_ssl=False)
yag.send(to='docker@163.com',
         subject='from shark',
         contents='test')

這樣就愉快的發(fā)送了一封測試郵件到 docker@163.com 的郵箱旭咽。

當(dāng)然前提是:

  1. 126 郵箱開通了 SMTP功能贞奋。
  2. 把 126 郵箱的賬號和密碼已經(jīng)注冊到自己系統(tǒng)的密鑰環(huán)中。

發(fā)送附件

發(fā)送

發(fā)送附件只需要給 send方法傳遞 attachments 關(guān)鍵字參數(shù)

比如我在系統(tǒng)的某一個目錄下有一張圖片穷绵,需要發(fā)送給 docker@163.com

import yagmail

yag = yagmail.SMTP(user='shark@126.com',
                   host='smtp.126.com',
                   port=25,
                   smtp_ssl=False)
yag.send(to='docker@163.com',
         subject='from shark',
         contents='test',
         attachments='./松鼠.jpeg')

收到的郵件和附件

image

使用 ssl 發(fā)送加密郵件

要發(fā)送加密郵件轿塔,只需要把 smtp_ssl 關(guān)鍵字參數(shù)去掉即可,因為默認(rèn)就是采用的加密方式 smtp_ssl=True仲墨。

不傳遞 stmp_ssl 關(guān)鍵字參數(shù)的同時勾缭,需要設(shè)置端口為郵箱服務(wù)提供商的加密端口,這里還是以 126 郵箱為例目养,端口是 465俩由。

import yagmail

yag = yagmail.SMTP(user='shark@126.com',
                   host='smtp.126.com',
                   port=465)
yag.send(to='docker@163.com',
         subject='from sharkyunops',
         contents='test',
         attachments='./松鼠.jpeg')

發(fā)送 帶 html 標(biāo)記語言的郵件內(nèi)容

在實際的生產(chǎn)環(huán)境中,經(jīng)常會發(fā)送郵件溝通相關(guān)事宜癌蚁,往往會有表格之類的內(nèi)容幻梯,但是又不想以附件的形式發(fā)送,就可以利用 html 標(biāo)記語言的方式組織數(shù)據(jù)努释。

import yagmail

yag = yagmail.SMTP(user='shark@126.com',
                   host='smtp.126.com',
                   port=465)

html="""<table border="1">
    <thead>
    <tr>
        <th>姓名</th>
        <th>年齡</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>shak</td>
        <td>18</td>
    </tr>
    <tr>
        <td>西瓜甜</td>
        <td>28</td>
    </tr>
    </tbody>
</table>
"""

yag.send(to='docker@163.com',
         subject='from sharkyunops',
         contents=['test',html])

image

更多

如果不指定to參數(shù)碘梢,則發(fā)送給自己

如果to參數(shù)是一個列表,則將該郵件發(fā)送給列表中的所有用戶

attachments 參數(shù)的值可以是列表伐蒂,表示發(fā)送多個附件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痘系,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饿自,更是在濱河造成了極大的恐慌汰翠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昭雌,死亡現(xiàn)場離奇詭異复唤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)烛卧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門佛纫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人总放,你說我怎么就攤上這事呈宇。” “怎么了局雄?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵甥啄,是天一觀的道長。 經(jīng)常有香客問我炬搭,道長蜈漓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任宫盔,我火速辦了婚禮融虽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灼芭。我一直安慰自己有额,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布彼绷。 她就那樣靜靜地躺著巍佑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苛预。 梳的紋絲不亂的頭發(fā)上句狼,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音热某,去河邊找鬼腻菇。 笑死,一個胖子當(dāng)著我的面吹牛昔馋,可吹牛的內(nèi)容都是我干的筹吐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秘遏,長吁一口氣:“原來是場噩夢啊……” “哼丘薛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邦危,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤洋侨,失蹤者是張志新(化名)和其女友劉穎舍扰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體希坚,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡边苹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了裁僧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片个束。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖聊疲,靈堂內(nèi)的尸體忽然破棺而出茬底,到底是詐尸還是另有隱情,我是刑警寧澤获洲,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布阱表,位于F島的核電站,受9級特大地震影響昌妹,放射性物質(zhì)發(fā)生泄漏捶枢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一飞崖、第九天 我趴在偏房一處隱蔽的房頂上張望烂叔。 院中可真熱鬧,春花似錦固歪、人聲如沸蒜鸡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逢防。三九已至,卻和暖如春蒲讯,著一層夾襖步出監(jiān)牢的瞬間忘朝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工判帮, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留局嘁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓晦墙,卻偏偏與公主長得像悦昵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晌畅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容