簡介html
Python發送郵件的教程本人在網站搜索的時候搜索出來了一大堆,可是都是說了一大堆原理而後就推出了實現代碼,我測試用給出的代碼進行發送郵件時都不成功,後面找了好久才找到緣由,這都是沒有一個詳細的環境調試致使,因此今天特出一個詳細的教程,一步一步從環境調試到代碼實現整一個教程,但願對還在苦苦尋找解決方法卻遲遲不能獲得有效解決的人員一點幫助。python
SMTP協議服務器
首先了解SMTP(簡單郵件傳輸協議),郵件傳送代理程序使用SMTP協議來發送電郵到接收者的郵件服務器。SMTP協議只能用來發送郵件,不能用來接收郵件,而大多數的郵件發送服務器都是使用SMTP協議。SMTP協議的默認TCP端口號是25。python2.7
環境調試編輯器
上面說了是使用SMTP協議發送的郵件,因此須要先查看您的發件人郵箱是否有開啓SMTP協議,如沒有須要開啓,我測試使用的是163.com的郵箱做爲發信人郵箱,開啓SMTP協議以下圖所示。測試
1.先登陸到163.com郵箱中(網易郵箱),以下圖網站
2.看到郵箱上面的功能欄中有一個「設置」的選項,單擊該選項,而後選擇下拉菜單的「POP3/SMTP/IMAP」ui
3.以下圖所示,上面紅框的兩個必須勾選上,如沒有勾選,要選擇開啓就能夠勾選上了,而後能夠看到下面紅框裏是:SMTP服務器: smtp.163.com編碼
實現代碼spa
通過上面的設置後就將環境調試好了,下面就能夠實現代碼了,推薦使用pycharm4.5.3編輯器來編寫代碼,下面的代碼在python2.7和python3.4版本測試均可使用。
1 #coding:utf-8 #強制使用utf-8編碼格式 2 import smtplib #加載smtplib模塊 3 from email.mime.text import MIMEText 4 from email.utils import formataddr 5 my_sender='發件人郵箱帳號' #發件人郵箱帳號,爲了後面易於維護,因此寫成了變量 6 my_user='收件人郵箱帳號' #收件人郵箱帳號,爲了後面易於維護,因此寫成了變量 7 def mail(): 8 ret=True 9 try: 10 msg=MIMEText('填寫郵件內容','plain','utf-8') 11 msg['From']=formataddr(["發件人郵箱暱稱",my_sender]) #括號裏的對應發件人郵箱暱稱、發件人郵箱帳號 12 msg['To']=formataddr(["收件人郵箱暱稱",my_user]) #括號裏的對應收件人郵箱暱稱、收件人郵箱帳號 13 msg['Subject']="主題" #郵件的主題,也能夠說是標題 14 15 server=smtplib.SMTP("smtp.xxx.com",25) #發件人郵箱中的SMTP服務器,端口是25 16 server.login(my_sender,"發件人郵箱密碼") #括號中對應的是發件人郵箱帳號、郵箱密碼 17 server.sendmail(my_sender,[my_user,],msg.as_string()) #括號中對應的是發件人郵箱帳號、收件人郵箱帳號、發送郵件 18 server.quit() #這句是關閉鏈接的意思 19 except Exception: #若是try中的語句沒有執行,則會執行下面的ret=False 20 ret=False 21 return ret 22 23 ret=mail() 24 if ret: 25 print("ok") #若是發送成功則會返回ok,稍等20秒左右就能夠收到郵件 26 else: 27 print("filed") #若是發送失敗則會返回filed
若是發送成功則會返回ok,不然爲執行不成功,以下圖:
開拓視野
雖然代碼能夠用了,可是難免得有些人就愛瞎折騰,玩着玩着就把代碼玩壞了,因此這裏附上幾個知識點以解你之疑惑。
1.看到上面代碼第一行的「#coding:utf-8 」沒有,相信不少看這代碼的人都不怎麼注意這一行,反正這和代碼實現又沒啥關係,保存時選擇utf-8格式就好了嘛;告訴大家哦這一行代碼在python中很是重要,最好寫每一頁都要加上強制字符編碼,由於python2版本它默認識別ASCII編碼,因此當中文字符出如今python中它是不認的,出現的錯誤提示以下圖所示:
錯誤提示示例: File "F:/python/s12/pymail.py", line 2
SyntaxError: Non-ASCII character '\xe5' in file F:/python/s12/pymail.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
因此當出現上面的編碼錯誤提示時,能夠在頁面的第一行加上
#coding:utf-8 #強制編碼爲utf-8
或
# coding: GBK #強制編碼爲GBK