Python3 無痛發(fā)送郵件

使用第三方庫 yagmail


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


簡單介紹

目標是盡可能簡單,無痛地發(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', '郵件標題', contents)

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

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

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

安裝模塊

pip3 install  yagmail  # linux / Mac

pip install   yagmail    # windows

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

關于賬戶和密碼

開通自己郵箱的 SMTP 功能范咨,并獲取到授權碼

這個賬戶是你要使用此郵箱發(fā)送郵件的賬戶,密碼不是平時登錄郵箱的密碼厂庇,而是開通 POP3/SMTP 功能后設置的客戶端授權密碼渠啊。

這里以 126 郵箱為例:

image.png
image.png
image.png


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

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

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

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

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

模塊支持從當前系統(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('你的賬號', '你的授權密碼')

注冊賬戶和密碼灭返,只需要執(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 的郵箱。

當然前提是:

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

發(fā)送附件

發(fā)送

發(fā)送附件只需要給 send方法傳遞 attachments 關鍵字參數(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.png

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

要發(fā)送加密郵件黔衡,只需要把 smtp_ssl 關鍵字參數(shù)去掉即可蚓聘,因為默認就是采用的加密方式 smtp_ssl=True

不傳遞 stmp_ssl 關鍵字參數(shù)的同時盟劫,需要設置端口為郵箱服務提供商的加密端口夜牡,這里還是以 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 標記語言的郵件內(nèi)容

在實際的生產(chǎn)環(huán)境中塘装,經(jīng)常會發(fā)送郵件溝通相關事宜,往往會有表格之類的內(nèi)容影所,但是又不想以附件的形式發(fā)送蹦肴,就可以利用 html 標記語言的方式組織數(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.png

更多

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

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

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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市裂七,隨后出現(xiàn)的幾起案子皆看,更是在濱河造成了極大的恐慌,老刑警劉巖背零,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腰吟,死亡現(xiàn)場離奇詭異,居然都是意外死亡徙瓶,警方通過查閱死者的電腦和手機毛雇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侦镇,“玉大人灵疮,你說我怎么就攤上這事】欠保” “怎么了震捣?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闹炉。 經(jīng)常有香客問我蒿赢,道長,這世上最難降的妖魔是什么渣触? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任羡棵,我火速辦了婚禮,結(jié)果婚禮上嗅钻,老公的妹妹穿的比我還像新娘皂冰。我一直安慰自己,他們只是感情好养篓,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布秃流。 她就那樣靜靜地躺著,像睡著了一般柳弄。 火紅的嫁衣襯著肌膚如雪剔应。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天语御,我揣著相機與錄音,去河邊找鬼席怪。 笑死应闯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的挂捻。 我是一名探鬼主播碉纺,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骨田?” 一聲冷哼從身側(cè)響起耿导,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎态贤,沒想到半個月后舱呻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡悠汽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年箱吕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柿冲。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡茬高,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出假抄,到底是詐尸還是另有隱情怎栽,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布宿饱,位于F島的核電站熏瞄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刑棵。R本人自食惡果不足惜巴刻,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛉签。 院中可真熱鬧胡陪,春花似錦、人聲如沸碍舍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽片橡。三九已至妈经,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捧书,已是汗流浹背吹泡。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留经瓷,地道東北人爆哑。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像舆吮,于是被迫代替她去往敵國和親揭朝。 傳聞我的和親對象是個殘疾皇子队贱,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351

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