python模塊smtplib實(shí)現(xiàn)純文本郵件發(fā)送功能
今天學(xué)到了如何使用Python的smtplib庫(kù)發(fā)送郵件,中間也是遇到了各種各樣的錯(cuò)誤和困難,還好都一一的解決了。下面來(lái)談一談我的這段經(jīng)歷。
配置你的郵箱
為什么要配置郵箱呢?具體要配置什么呢?
因?yàn)槲覀兩暾?qǐng)的一些免費(fèi)郵箱都是默認(rèn)不開(kāi)啟smtp/pop協(xié)議的。
SMTP是發(fā)郵件使用到的計(jì)算機(jī)網(wǎng)絡(luò)中應(yīng)用層協(xié)議中的一個(gè);而POP則是收郵件時(shí)使用到的計(jì)算機(jī)網(wǎng)絡(luò)中的應(yīng)用層協(xié)議的其中一個(gè)。這都是理論性的知識(shí)了,上過(guò)計(jì)算機(jī)網(wǎng)絡(luò)這門課的想必都知道,就不多說(shuō)了。
配置就是要開(kāi)啟這項(xiàng)服務(wù)。否則我們就不能實(shí)現(xiàn)用Python代碼來(lái)控制發(fā)送和接收郵件了。
我們?cè)谂渲猛瓿芍?,系統(tǒng)會(huì)提示給我們一個(gè)郵箱客戶端的授權(quán)碼。作用就是我們登陸的時(shí)候替代原來(lái)的登陸密碼。大家一定要完善保存咯。我這里采用的是163的郵箱,所以是可以自己設(shè)置這個(gè)授權(quán)碼的。
使用代碼發(fā)郵件
還是按照,先看代碼再研究的策略。如下:
# coding:utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header """ 請(qǐng)確保自己的郵箱的smtp協(xié)議開(kāi)啟,都則會(huì)出現(xiàn)認(rèn)證的錯(cuò)誤的,如ssh等 """ sender = "1564086XXXX@163.com" # 收件人,可以是多個(gè) receivers = ['102170XXXX@qq.com'] # 三個(gè)參數(shù):第一個(gè)為純文本,第二個(gè)plain設(shè)置文本格式,第三個(gè)為編碼格式 message = MIMEText('這里是發(fā)送的郵件的主要的內(nèi)容。Pure Text Here!','plain','utf-8') message['From'] = Header('來(lái)自Mark','utf-8') message['To'] = Header('測(cè)試標(biāo)題','utf-8') subject = '哈哈哈哈哈哈,這是郵件的主題 ' message['Subject'] = Header(subject,'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect('smtp.163.com',25) smtpObj.login(sender,'你的客戶端授權(quán)碼') smtpObj.sendmail(sender,receivers,message.as_string()) smtpObj.quit() print '郵件已成功發(fā)送了' except smtplib.SMTPException,e: print e.message
測(cè)試的結(jié)果:
D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/mail/PureText.py
郵件已成功發(fā)送了Process finished with exit code 0
確實(shí)是成功發(fā)送了的。
代碼探查
下面就來(lái)深入的研究一下發(fā)送郵件實(shí)現(xiàn)的流程吧。我們注意到了,最最主要的是下面的這樣一段代碼。
smtpObj = smtplib.SMTP() smtpObj.connect('smtp.163.com',25) smtpObj.login(sender,'你的客戶端授權(quán)碼') smtpObj.sendmail(sender,receivers,\ message.as_string() smtpObj.quit()
不難看出,主要是經(jīng)歷了下面的這些流程:
- 獲得SMTP服務(wù)
- 連接服務(wù)器
- 模擬客戶端登陸
- 實(shí)現(xiàn)發(fā)送郵件
- 退出登錄
其中核心的也就是客戶端登陸和發(fā)送郵件的兩個(gè)步驟。模擬登陸的時(shí)候需要注意的就是使用你自己的授權(quán)碼就行了,沒(méi)什么難度。而發(fā)送郵件的時(shí)候需要注意一下參數(shù)。發(fā)件人是一個(gè),而收件人是一個(gè)列表,里面可以有很多個(gè)收件人(這樣可以借助這個(gè)列表實(shí)現(xiàn)郵件的群發(fā))。
其他需要注意的也就是使用MIME類型的數(shù)據(jù),和使用utf-8編碼就行了。屬于非智力相關(guān)的內(nèi)容。所以不用太在意。會(huì)用就可以了。
這樣看來(lái),發(fā)個(gè)郵件什么的也不是很難嘛。(^__^) 嘻嘻……
錯(cuò)誤總結(jié)
錯(cuò)誤一:500、530等5開(kāi)頭的錯(cuò)誤,大致為什么ssh異常啊什么的。有點(diǎn)web常識(shí)的都知道,5開(kāi)頭的錯(cuò)誤代碼一般都是服務(wù)器內(nèi)部的錯(cuò)誤,所以這基本上可以判斷出我們的代碼其實(shí)沒(méi)有出錯(cuò)。我們主要的排錯(cuò)方向應(yīng)該是服務(wù)器端了(當(dāng)然了,凡是沒(méi)有任何的絕對(duì),但這種情況出現(xiàn)的概率確實(shí)是很小的)。這時(shí),我們要檢查一下自己的郵箱的SMTP/POP服務(wù)開(kāi)啟了沒(méi)有啊等等
錯(cuò)誤二:授權(quán)碼沒(méi)有寫或者填寫成了自己的郵箱之前的密碼,錯(cuò)誤提示一般都是認(rèn)證相關(guān)的。這一點(diǎn)屬于低級(jí)錯(cuò)誤了。因?yàn)樵谂渲猛曜约旱腟MTP/POP服務(wù)之后,系統(tǒng)會(huì)發(fā)還一個(gè)短信提示,告知用戶要使用授權(quán)碼替代原密碼登陸郵箱。所以使用你的授權(quán)碼進(jìn)行登錄唄。
錯(cuò)誤三:代碼中的錯(cuò)誤。這就更加的不應(yīng)該了,少寫了必填項(xiàng),或者編碼沒(méi)添加等類似的錯(cuò)誤是我們應(yīng)該極力避免的,所以盡量保證自己的代碼的正確。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python tkinter布局與按鈕間距設(shè)置方式
這篇文章主要介紹了Python tkinter布局與按鈕間距設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Python的NumPy使用之?dāng)?shù)組過(guò)濾
這篇文章主要介紹了Python的NumPy使用之?dāng)?shù)組過(guò)濾,在 NumPy中,我們使用布爾索引列表來(lái)過(guò)濾數(shù)組布爾索引列表是與數(shù)組中的索引相對(duì)應(yīng)的布爾值列表,需要的朋友可以參考下2023-07-07Python爬取商家聯(lián)系電話以及各種數(shù)據(jù)的方法
今天小編就為大家分享一篇Python爬取商家聯(lián)系電話以及各種數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11利用python實(shí)現(xiàn)xml與數(shù)據(jù)庫(kù)讀取轉(zhuǎn)換的方法
這篇文章主要給大家介紹了關(guān)于利用python實(shí)現(xiàn)xml與數(shù)據(jù)庫(kù)讀取轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06python如何將文件a.txt的內(nèi)容復(fù)制到b.txt中
這篇文章主要介紹了python如何將文件a.txt的內(nèi)容復(fù)制到b.txt中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12python正則表達(dá)中的re庫(kù)常用方法總結(jié)
這篇文章主要介紹了python正則表達(dá)中的re庫(kù)常用方法總結(jié)文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-08-08