一黔酥、前言
相信郵箱對許多人來說只是一個全是推銷郵件的垃圾桶,或者接收驗證碼的一個工具洪橘。但是郵箱其實還有很多作用跪者,其中最重要的作用就是消息交流。
現(xiàn)在我們傳遞消息的方式有很多種熄求,像是比較流行QQ渣玲、微信,或者微博弟晚、知乎這種社交軟件忘衍。甚至我們還可以劍走偏鋒的方式,比如支付寶卿城、淘寶這種軟件進行交流枚钓。
但是這些軟件通常都需要我們登錄,而且要在相應的客戶端才能進行操作瑟押。而郵件則不一樣搀捷,很多語言都提供了郵件相關(guān)操作的API,我們只需要有一個郵箱多望,就可以很隨意的發(fā)送郵件嫩舟。而且郵件的監(jiān)管相比其它軟件要松得多。
那說了這么多怀偷,我們能用郵件做些什么呢家厌?
在我的實際工作學習中,我喜歡把郵件當作一個提醒工具枢纠。有時候一些程序的執(zhí)行需要很長時間像街,這個時候就可以在程序運行成功后給我們的手機發(fā)郵件黎棠。這樣我們就能很及時地進行下一步的工作。
二镰绎、準備工作
在發(fā)送郵件之前脓斩,我們需要先獲取一個郵箱的授權(quán)碼。這個授權(quán)碼相當于你的郵箱密碼畴栖,通乘婢玻可以在網(wǎng)頁版郵箱的設置中獲取。這里以163郵箱為例吗讶,首先登錄郵箱:mail.163.com/燎猛。登錄后可以看到如下頁面:
我們點擊設置,然后選擇POP3/SMTP/IMAP選項照皆,然后會看到如下頁面:
點擊開啟重绷,然后按照要求發(fā)送短信即可獲取授權(quán)碼。這個授權(quán)碼只會顯示一次膜毁,因此需要保存好昭卓。獲取授權(quán)碼后,我們就可以開始發(fā)送郵件了
三瘟滨、發(fā)送郵件
在python中自帶了smtplib模塊用于發(fā)送郵件候醒,但是使用起來比較復雜。我們今天直接使用封裝好的yagmail模塊進行郵件的發(fā)送杂瘸。我們先來安裝yagmail:
pip install yagmail
接下來的使用就非常簡單了倒淫,基本步驟大致如下:
準備用于發(fā)送郵件的郵箱
創(chuàng)建SMTP對象
準備要發(fā)送的內(nèi)容
發(fā)送郵件
關(guān)閉連接
具體代碼如下:
import yagmail
# 1、準備用于發(fā)送郵件的郵箱
username = "sockwz@163.com"
password = "你的授權(quán)碼"
# 2败玉、創(chuàng)建SMTP對象
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
# 3敌土、準備要發(fā)送的內(nèi)容
content = [
"這是一封郵件"
]
# 4、發(fā)送郵件
yag.send(to="2930777518@qq.com", subject="測試郵件", contents=content)
# 5绒怨、關(guān)閉連接
yag.close()
這里又幾點需要注意:
(1)STMP
其中SMTP其實是一種郵箱協(xié)議纯赎,我們使用yagmail.SMTP創(chuàng)建SMTP對象,它給我們封裝了底層的細節(jié)南蹂。我們只需要把用于發(fā)送郵件的郵箱和授權(quán)碼給它犬金,已經(jīng)郵箱服務器ip給它就好了。
這里又出現(xiàn)了一個郵箱服務器的概念六剥,通常發(fā)送郵件的流程是:客戶端A -> 郵箱服務器 -> 客戶端B晚顷。
其中郵箱服務器充當了郵遞員的身份,我們需要告訴程序要哪個郵遞員發(fā)郵件疗疟。因為我們使用的是SMTP協(xié)議该默,而且是163的郵箱,因此我們需要填163郵箱服務器的ip策彤。通常情況下郵箱服務器ip格式為:協(xié)議名.郵箱公司名.com栓袖。當然這個不是固定的匣摘,具體的可以在網(wǎng)頁版的設置中查看,比如網(wǎng)易郵箱的ip如下:
(2)郵箱內(nèi)容
郵箱內(nèi)容需要是一個列表裹刮。
(3)發(fā)送郵件
我們發(fā)送郵件的代碼如下:
yag.send(to="2930777518@qq.com", subject="測試郵件", contents=content)
這里我們使用了三個參數(shù)音榜,其中to是接收方的郵箱。subject是郵件的主體捧弃,contents是郵箱內(nèi)容赠叼。yag.send函數(shù)還有很多其它參數(shù),這里就不再細說了违霞。
四蚌讼、發(fā)送附件
附件的發(fā)送非常簡單丹诀,我們只需要在contents參數(shù)中寫入附件的參數(shù)即可渐溶,比如下面這樣:
import yagmail
username = "sockwz@163.com"
password = "你的授權(quán)碼"
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
content = [
# 附件的路徑
"xyql.jpg"
]
yag.send(to="2930777518@qq.com", subject="測試郵件", contents=content)
yag.close()
因為在我的程序下有一個叫xyql.jpg的圖片努咐,所以我直接寫就好了武通。當然有時候我們還需要讓圖片直接顯示在郵件中主守,這種情況我們只需要調(diào)用一下yagmail.inline函數(shù)即可啊掏,代碼如下:
import yagmail
username = "sockwz@163.com"
password = "你的授權(quán)碼"
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
content = [
'娜娜醬',
yagmail.inline("xyql.jpg")
]
yag.send(to="2930777518@qq.com", subject="測試郵件", contents=content)
yag.close()
這里需要注意一下鳖粟,在測試過程中發(fā)現(xiàn)不能直接單獨發(fā)內(nèi)斂圖片刃榨,而需要配一些文字發(fā)送弹砚,不然會被郵箱服務器退信。
下面我們分別看看附件和內(nèi)斂圖片的區(qū)別:
區(qū)別還是很明顯的枢希。
五桌吃、發(fā)送html郵件
yagmail本身就是將文字作為html發(fā)送的,因此只要我們發(fā)送html郵件不需要做什么改變苞轿。但是為了方便茅诱,我們還是把html寫一個單獨的文件,比如文件index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我是一個測試頁面</title>
</head>
<body>
<h1>這是一個測試標題</h1>
<p style="color: red">這是一個測試內(nèi)容</p>
</body>
</html>
顯示效果如下:
效果很簡單搬卒,然后我們把上面的代碼搬過來瑟俭,稍作修改:
username = "sockwz@163.com"
password = "你的授權(quán)碼"
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
content = [
# 直接從html文件中讀取內(nèi)容
open('index.html', 'r', encoding='utf-8').read()
]
yag.send(to="2930777518@qq.com", subject="測試郵件", contents=content)
yag.close()
上面我們直接用open讀取html的內(nèi)容,然后發(fā)送契邀。下面是接收到的效果圖:
可以看到郵件正常接收摆寄。上面這些操作就可以滿足我們工作的大多數(shù)需求了,大家可以自己定制一個提醒程序坯门。
作者:ZackSock
鏈接:https://juejin.cn/post/6943473489940578318