您好,登錄后才能下訂單哦!
今天學到了如何使用Python的smtplib庫發送郵件,中間也是遇到了各種各樣的錯誤和困難,還好都一一的解決了。下面來談一談我的這段經歷。
配置你的郵箱
為什么要配置郵箱呢?具體要配置什么呢?
因為我們申請的一些免費郵箱都是默認不開啟smtp/pop協議的。
SMTP是發郵件使用到的計算機網絡中應用層協議中的一個;而POP則是收郵件時使用到的計算機網絡中的應用層協議的其中一個。這都是理論性的知識了,上過計算機網絡這門課的想必都知道,就不多說了。
配置就是要開啟這項服務。否則我們就不能實現用Python代碼來控制發送和接收郵件了。
我們在配置完成之后,系統會提示給我們一個郵箱客戶端的授權碼。作用就是我們登陸的時候替代原來的登陸密碼。大家一定要完善保存咯。我這里采用的是163的郵箱,所以是可以自己設置這個授權碼的。
使用代碼發郵件
還是按照,先看代碼再研究的策略。如下:
# coding:utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header """ 請確保自己的郵箱的smtp協議開啟,都則會出現認證的錯誤的,如ssh等 """ sender = "1564086XXXX@163.com" # 收件人,可以是多個 receivers = ['102170XXXX@qq.com'] # 三個參數:第一個為純文本,第二個plain設置文本格式,第三個為編碼格式 message = MIMEText('這里是發送的郵件的主要的內容。Pure Text Here!','plain','utf-8') message['From'] = Header('來自Mark','utf-8') message['To'] = Header('測試標題','utf-8') subject = '哈哈哈哈哈哈,這是郵件的主題 ' message['Subject'] = Header(subject,'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect('smtp.163.com',25) smtpObj.login(sender,'你的客戶端授權碼') smtpObj.sendmail(sender,receivers,message.as_string()) smtpObj.quit() print '郵件已成功發送了' except smtplib.SMTPException,e: print e.message
測試的結果:
D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/mail/PureText.py
郵件已成功發送了Process finished with exit code 0
確實是成功發送了的。
代碼探查
下面就來深入的研究一下發送郵件實現的流程吧。我們注意到了,最最主要的是下面的這樣一段代碼。
smtpObj = smtplib.SMTP() smtpObj.connect('smtp.163.com',25) smtpObj.login(sender,'你的客戶端授權碼') smtpObj.sendmail(sender,receivers,\ message.as_string() smtpObj.quit()
不難看出,主要是經歷了下面的這些流程:
其中核心的也就是客戶端登陸和發送郵件的兩個步驟。模擬登陸的時候需要注意的就是使用你自己的授權碼就行了,沒什么難度。而發送郵件的時候需要注意一下參數。發件人是一個,而收件人是一個列表,里面可以有很多個收件人(這樣可以借助這個列表實現郵件的群發)。
其他需要注意的也就是使用MIME類型的數據,和使用utf-8編碼就行了。屬于非智力相關的內容。所以不用太在意。會用就可以了。
這樣看來,發個郵件什么的也不是很難嘛。(^__^) 嘻嘻……
錯誤總結
錯誤一:500、530等5開頭的錯誤,大致為什么ssh異常啊什么的。有點web常識的都知道,5開頭的錯誤代碼一般都是服務器內部的錯誤,所以這基本上可以判斷出我們的代碼其實沒有出錯。我們主要的排錯方向應該是服務器端了(當然了,凡是沒有任何的絕對,但這種情況出現的概率確實是很小的)。這時,我們要檢查一下自己的郵箱的SMTP/POP服務開啟了沒有啊等等
錯誤二:授權碼沒有寫或者填寫成了自己的郵箱之前的密碼,錯誤提示一般都是認證相關的。這一點屬于低級錯誤了。因為在配置完自己的SMTP/POP服務之后,系統會發還一個短信提示,告知用戶要使用授權碼替代原密碼登陸郵箱。所以使用你的授權碼進行登錄唄。
錯誤三:代碼中的錯誤。這就更加的不應該了,少寫了必填項,或者編碼沒添加等類似的錯誤是我們應該極力避免的,所以盡量保證自己的代碼的正確。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。