Python3_發(fā)送郵件

使用第三方庫(kù) yagmail

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

簡(jiǎn)單介紹

目標(biāo)是盡可能簡(jiǎn)單府框,無(wú)痛地發(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)

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

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

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

安裝模塊

pip3 install  yagmail  # linux / Mac

pip install   yagmail    # windows

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

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

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

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

這里以 126 郵箱為例:

image
image
image


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

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

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

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

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

模塊支持從當(dāng)前系統(tǒng)環(huán)境中的密鑰環(huán)中獲取賬戶和密碼抽高,要想實(shí)現(xiàn)這個(gè)功能,需要依賴模塊 keyring透绩。之后把賬戶和密碼注冊(cè)到系統(tǒng)的密鑰環(huán)中即可實(shí)現(xiàn)翘骂。

1. 安裝依賴模塊

pip3 install  keyring 

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

2. 開(kāi)始向密鑰環(huán)注冊(cè)

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

注冊(cè)賬戶和密碼壁熄,只需要執(zhí)行一次即可。

3. 發(fā)送郵件

import yagmail

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

yag.send(
    to='收件箱賬號(hào)',
    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ā)送了一封測(cè)試郵件到 docker@163.com 的郵箱。

當(dāng)然前提是:

  1. 126 郵箱開(kāi)通了 SMTP功能莹桅。
  2. 把 126 郵箱的賬號(hào)和密碼已經(jīng)注冊(cè)到自己系統(tǒng)的密鑰環(huán)中昌执。

發(fā)送附件

發(fā)送

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

比如我在系統(tǒng)的某一個(gè)目錄下有一張圖片,需要發(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ù)去掉即可,因?yàn)槟J(rèn)就是采用的加密方式 smtp_ssl=True此洲。

不傳遞 stmp_ssl 關(guān)鍵字參數(shù)的同時(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)記語(yǔ)言的郵件內(nèi)容

在實(shí)際的生產(chǎn)環(huán)境中,經(jīng)常會(huì)發(fā)送郵件溝通相關(guān)事宜汁汗,往往會(huì)有表格之類的內(nèi)容衷畦,但是又不想以附件的形式發(fā)送,就可以利用 html 標(biāo)記語(yǔ)言的方式組織數(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ù)是一個(gè)列表,則將該郵件發(fā)送給列表中的所有用戶

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末菩混,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扁藕,更是在濱河造成了極大的恐慌沮峡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亿柑,死亡現(xiàn)場(chǎng)離奇詭異邢疙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)望薄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)疟游,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痕支,你說(shuō)我怎么就攤上這事乡摹。” “怎么了采转?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵聪廉,是天一觀的道長(zhǎng)瞬痘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)板熊,這世上最難降的妖魔是什么框全? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮干签,結(jié)果婚禮上津辩,老公的妹妹穿的比我還像新娘。我一直安慰自己容劳,他們只是感情好喘沿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著竭贩,像睡著了一般蚜印。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上留量,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天窄赋,我揣著相機(jī)與錄音,去河邊找鬼楼熄。 笑死忆绰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的可岂。 我是一名探鬼主播错敢,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缕粹!你這毒婦竟也來(lái)了伐债?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤致开,失蹤者是張志新(化名)和其女友劉穎峰锁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體双戳,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虹蒋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了飒货。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魄衅。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖塘辅,靈堂內(nèi)的尸體忽然破棺而出晃虫,到底是詐尸還是另有隱情,我是刑警寧澤扣墩,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布哲银,位于F島的核電站扛吞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏荆责。R本人自食惡果不足惜滥比,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望做院。 院中可真熱鬧盲泛,春花似錦、人聲如沸键耕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)屈雄。三九已至村视,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棚亩,已是汗流浹背蓖议。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工虏杰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讥蟆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓纺阔,卻偏偏與公主長(zhǎng)得像瘸彤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笛钝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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