收發(fā)郵件幾乎是每個人每天都需要做的一件事情罢屈,對于一些固定每天需要發(fā)送的郵件或者是同時需要發(fā)送好幾十好幾百份的時候沮稚,我們可以考慮借助Python來自動發(fā)送郵件辨绊。
在利用Python進(jìn)行發(fā)送郵件時主要借助smtplib和email兩個模塊悬钳,其中smtplib主要用來建立服務(wù)器鏈接敞咧、服務(wù)器斷開的工作棘捣,而email模塊主要用來設(shè)置一些與郵件本身相關(guān)的內(nèi)容,比如收件人休建、發(fā)件人乍恐、主題之類的。
不同郵箱的服務(wù)器鏈接地址(官方名叫端口)不一樣测砂,大家根據(jù)自己使用的郵箱設(shè)置相應(yīng)的服務(wù)器鏈接茵烈。如果是outlook企業(yè)郵箱的話,一般都是mail.xxx.com(xxx是你公司名字)砌些,具體的可以問公司的運(yùn)維同事呜投。
這里我們拿公共郵箱來舉例,163郵箱還是相對比較常用的存璃,所以這里就以163郵箱為例宙彪,給大家演示一下具體如何利用Python進(jìn)行自動發(fā)送郵件。
在開始進(jìn)行正式代碼之前有巧,需要先登陸自己的163郵箱進(jìn)行授權(quán)設(shè)置释漆,授權(quán)碼設(shè)置如下:
學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入學(xué)習(xí)交流群:【923414804】篮迎,我們一起學(xué)Python男图。
點(diǎn)擊設(shè)置中的POP3/SMTP/IMAP,勾選SMTP服務(wù)甜橱,根據(jù)提是進(jìn)行授權(quán)碼設(shè)置逊笆,設(shè)置授權(quán)成功后,在Python中利用授權(quán)碼進(jìn)行登陸岂傲,而不是你本來的郵箱密碼难裆,如果使用本來的郵箱密碼登陸,會報錯。
>>>import?smtplib
>>>from?email?import?encoders
>>>from?email.header?import?Header
>>>from?email.mime.text?import?MIMEText
>>>from?email.utils?import?parseaddr,?formataddr
>>>from?email.mime.application?import?MIMEApplication
#發(fā)件人郵箱
>>>asender="zhangjunhongdata@163.com"
#收件人郵箱
>>>areceiver="zhangjunhong@163.com"
#抄送人郵箱
>>>acc?='zhangjunhong@qq.com'
#郵件主題
>>>asubject?='這是一份測試郵件'
#發(fā)件人地址
>>>from_addr?="zhangjunhongdata@163.com"
#郵箱密碼(授權(quán)碼)
>>>password="123data"
#郵件設(shè)置
>>>msg?=?MIMEMultipart()
>>>msg['Subject']?=?asubject
>>>msg['to']?=?areceiver
>>>msg['Cc']?=?acc
>>>msg['from']?="張俊紅"
#郵件正文內(nèi)容
>>>body?="你好乃戈,這是一份測試郵件"
#添加郵件正文:
>>>msg.attach(MIMEText(body,'plain','utf-8'))
#添加附件
#注意這里的文件路徑是斜杠
>>>xlsxpart?=?MIMEApplication(open('C:/Users/zhangjunhong/Desktop/這是附件.xlsx','rb').read())
>>>xlsxpart.add_header('Content-Disposition','attachment',?filename='這是附件.xlsx')
>>>msg.attach(xlsxpart)
#設(shè)置郵箱服務(wù)器地址以及端口
>>>smtp_server?="smtp.163.com"
>>>server?=?smtplib.SMTP(smtp_server,25)
>>>server.set_debuglevel(1)
#登陸郵箱
>>>server.login(from_addr,?password)
#發(fā)送郵件
>>>server.sendmail(from_addr,?>>>areceiver.split(',')+acc.split(','),?msg.as_string())
#斷開服務(wù)器鏈接
server.quit()
最后的結(jié)果如下圖:
如果是需要同時發(fā)送多份郵件褂痰,可以把上述郵件發(fā)送過程定義成一個函數(shù),把收件人以及其他內(nèi)容生成一個列表症虑,然后遍歷每一個收件人缩歪,最后調(diào)用發(fā)送郵件函數(shù)進(jìn)行多份郵件發(fā)送。
把郵件發(fā)送過程封裝成一個函數(shù)相對比較簡單谍憔,只需要把上述給單個人發(fā)送郵件的內(nèi)容當(dāng)成語句塊匪蝙,收件人當(dāng)作參數(shù)即可,下面我們定義了一個名為send_mail的函數(shù):
defsend_mail(areceiver):
給單人發(fā)送郵件的代碼
遍歷發(fā)送每一個郵件實(shí)現(xiàn)如下:
#多個收件人列表
receivers?=?["zhangjunhongdata1@163.com1",
"zhangjunhongdata2@163.com1",
"zhangjunhongdata3@163.com1"]
#開始遍歷
forr?in?receivers:
send_mail(r)
關(guān)于自動發(fā)送郵件還有很多內(nèi)容习贫,比如定時發(fā)送逛球,正文添加圖片,附件添加圖片苫昌,編寫圖形化界面需忿,也就是自己寫一個類似于outlook一樣的郵件客戶端都是可以的,本篇文章只是幫助大家打開自動發(fā)送郵件的大門蜡歹,里面還有很多精彩的內(nèi)容屋厘,大家有興趣的可以自行上網(wǎng)搜索學(xué)習(xí)。