Python實(shí)現(xiàn)郵件發(fā)送功能的方法詳解
郵件自動(dòng)化篇章所需的新模塊:
smtplib 郵件協(xié)議與發(fā)送模塊
email 內(nèi)容定義模塊
schedule 定時(shí)模塊
smtplib 與 email 模塊 可以幫助我們正常的發(fā)送郵件; schedule 模塊可以幫助我們定時(shí)發(fā)送郵件,比如工資郵件等需要固定時(shí)間發(fā)送的郵件
利用 python 發(fā)送普通郵件
認(rèn)識(shí)發(fā)送郵件流程
這里簡(jiǎn)單描述下發(fā)郵件的過(guò)程(說(shuō)實(shí)話,這一步我有點(diǎn)不想寫)
第一步:登錄郵箱
第二步:書(shū)寫郵件接受者的郵箱
第三步:書(shū)寫郵件標(biāo)題與內(nèi)容(有的時(shí)候還需要添加附件)
第四步:發(fā)送郵件
認(rèn)識(shí)郵件協(xié)議
- smtp:郵件發(fā)送的協(xié)議
- pop3:郵件接收的協(xié)議
什么是協(xié)議?
協(xié)議就是一種規(guī)則,其已經(jīng)被底層網(wǎng)絡(luò)封裝好。無(wú)需關(guān)心它的具體規(guī)則是什么,直接使用上層工具即可。
比如發(fā)送郵件這個(gè)場(chǎng)景,當(dāng)我們使用 smtp 協(xié)議發(fā)送郵件時(shí)。網(wǎng)絡(luò)發(fā)現(xiàn)是 smtp 協(xié)議,它就知道這是一封要發(fā)送出去的郵件;同樣 pop3 也是一樣的,當(dāng)網(wǎng)絡(luò)發(fā)現(xiàn)這是 pop3 協(xié)議 就知道這是一封要接收的郵件。
smtplib 模塊
smtplib 模塊是 python 中 發(fā)送郵件的很重要的模塊之一。
創(chuàng)建協(xié)議對(duì)象:
smptObj = smptlib.SMTP() 通過(guò) smptlib.SMTP() 生成 smpt 協(xié)議對(duì)象
創(chuàng)建鏈接:
smptObj.connect(smpt服務(wù)器地址, 25) 通過(guò) connect(服務(wù)器IP地址, 端口號(hào)),smpt服務(wù)默認(rèn)端口號(hào)為 25
登錄驗(yàn)證:
smptObj.login(mail_user, mail_password) 通過(guò) login(mail_user, mail_password) 傳入郵箱名稱、登錄密碼,完成驗(yàn)證。(注意:部分郵箱服務(wù)器這里傳入的是口令而不是登錄密碼[也叫做授權(quán)碼],在郵箱的設(shè)置里面查看)
發(fā)送郵件:
smptObj.sendmail(sender, receivers, message) 通過(guò) sendmail(sender, receivers, message) 傳入發(fā)送者的郵箱、接收者的郵箱、郵件內(nèi)容即可完成發(fā)送郵件的動(dòng)作。
PS:這里可以看到 "接收者的郵箱是 'receivers' 復(fù)數(shù)" ,所以 "接收者郵箱" 是一個(gè)數(shù)組、列表,可以發(fā)送給多個(gè)人; 消息內(nèi)容的 "message" 是消息對(duì)象的加密字符串
email 包
email包 有兩個(gè)比較常用的函數(shù):
| 函數(shù)名 | 參數(shù) | 說(shuō)明 |
|---|---|---|
| MIMEText | 郵件內(nèi)容、郵件類型、編碼格式 | 定義郵件發(fā)送內(nèi)容的對(duì)象 |
| Header | 各類信息、編碼格式 | 將各類信息定義成對(duì)象,比如標(biāo)題等。 |
PS:上文提到的 ""message" 是消息對(duì)象的加密字符串" 就是通過(guò) "MIMEText" 加密生成的
發(fā)送郵件小案例
代碼示例如下:
# coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
'''
第三方的 smpt [腳本中涉及的郵箱地址都是假的,請(qǐng)使用自己的真實(shí)郵箱地址進(jìn)行測(cè)試]
'''
mail_host = "smtp.sina.com" # 設(shè)置郵箱服務(wù)器
mail_user = "conan868242" # 設(shè)置自己的郵箱
mail_pass = "cb997b01a87232b2" # 這里就是郵箱的口令,也就是授權(quán)碼;不是密碼。
sender = "conan868242@sina.com" # 定義發(fā)送者郵箱(其實(shí)就是自己)
receivers = ["3241716373@qq.com"] # 定義接受者郵箱(可以是多個(gè)接收者)
message = MIMEText("這是一封測(cè)試郵件 O(∩_∩)O哈哈~", "plain", "utf-8") # 定義郵件內(nèi)容;"plain"是格式,表示是普通的文件內(nèi)容
message["From"] = Header(sender) # 在message內(nèi)定義發(fā)送信息 --> 發(fā)送者
message["Subject"] = Header("Python 測(cè)試郵件發(fā)送", "utf-8") # 在message內(nèi)定義發(fā)送信息的標(biāo)題
print("加密后的發(fā)送內(nèi)容\n", message.as_string()) # 打印輸出加密后的發(fā)送內(nèi)容
try: # 捕獲發(fā)送郵件的異常
smtpObj = smtplib.SMTP() # 實(shí)例化 SMTP 協(xié)議對(duì)象
smtpObj.connect(mail_host, 25) # 鏈接 SMTP 服務(wù)器
smtpObj.login(mail_user, mail_pass) # 登錄郵箱驗(yàn)證
smtpObj.sendmail(sender, receivers, message.as_string()) # 發(fā)送郵件; "message" 通過(guò) "as_string()" 進(jìn)行發(fā)送內(nèi)容字符串的加密
except smtplib.SMTPException as error:
print("error:{}".format(error))
PS:不要嘗試用這個(gè)源碼運(yùn)行了,我已經(jīng)將授權(quán)碼改了。
運(yùn)行結(jié)果如下:


發(fā)送郵件的避坑總結(jié)
發(fā)送者郵箱開(kāi)通 smtp 與 pop3 的訪問(wèn)許可
不同的郵箱需要的驗(yàn)證方式不同(有的是登錄密碼,有的是授權(quán)碼)
有些郵箱開(kāi)通授權(quán)的訪問(wèn)許可和授權(quán)碼可能會(huì)收費(fèi),這里需要注意一下(比如 QQ 郵箱 [給個(gè)差評(píng)])
到此這篇關(guān)于Python實(shí)現(xiàn)郵件發(fā)送功能的方法詳解的文章就介紹到這了,更多相關(guān)Python郵件發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python寫的一個(gè)簡(jiǎn)單DNS服務(wù)器實(shí)例
這篇文章主要介紹了Python寫的一個(gè)簡(jiǎn)單DNS服務(wù)器實(shí)例,需要的朋友可以參考下2014-06-06
python實(shí)現(xiàn)小世界網(wǎng)絡(luò)生成
今天小編就為大家分享一篇python實(shí)現(xiàn)小世界網(wǎng)絡(luò)生成,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
基于Python PaddleSpeech實(shí)現(xiàn)語(yǔ)音文字處理
PaddleSpeech基于飛槳PaddlePaddle的語(yǔ)音方向的開(kāi)源模型庫(kù),用于語(yǔ)音和音頻中的各種關(guān)鍵任務(wù)的開(kāi)發(fā),包含大量基于深度學(xué)習(xí)前沿和有影響力的模型。本文將介紹如何通過(guò)PaddleSpeech實(shí)現(xiàn)語(yǔ)音文字處理,感興趣的可以學(xué)習(xí)一下2022-01-01
python調(diào)用API接口實(shí)現(xiàn)登陸短信驗(yàn)證
在本篇文章里小編給大家整理的是關(guān)于python調(diào)用API接口實(shí)現(xiàn)登陸短信驗(yàn)證的實(shí)例內(nèi)容,需要的朋友們可以參考下。2020-05-05
Python3實(shí)現(xiàn)的簡(jiǎn)單三級(jí)菜單功能示例
這篇文章主要介紹了Python3實(shí)現(xiàn)的簡(jiǎn)單三級(jí)菜單功能,涉及Python用戶交互以及針對(duì)json格式數(shù)據(jù)的遍歷、讀取、判斷等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03

