Python之簡單的SMTP發送郵件詳細教程附代碼,pythonsmtp發送郵件
簡介
Python發送郵件的教程本人在網站搜尋的時候搜尋出來了一大堆,但是都是說了一大堆原理然後就推出了實現代碼,我測試用給出的代碼進行發送郵件時都不成功,後面找了很久才找到原因,這都是沒有一個詳細的環境調試導致,所以今天特出一個詳細的教程,一步一步從環境調試到代碼實現整一個教程,希望對還在苦苦尋找解決方案卻遲遲不能得到有效解決的人員一點協助。
SMTP協議
首先瞭解SMTP(簡易郵件傳輸通訊協定),郵件傳送代理程式使用SMTP協議來發送電郵到接收者的郵件伺服器。SMTP協議只能用來發送郵件,不能用來內送郵件,而大多數的郵件發送伺服器都是使用SMTP協議。SMTP協議的預設TCP連接埠號碼是25。
環境調試
上面說了是使用SMTP協議發送的郵件,所以需要先查看您的寄件者郵箱是否有開啟SMTP協議,如沒有需要開啟,我測試使用的是163.com的郵箱作為發信人郵箱,開啟SMTP協議如所示。
1.先登入到163.com郵箱中(網易郵箱),如
2.看到郵箱上面的功能欄中有一個“設定”的選項,單擊該選項,然後選擇下拉式功能表的“POP3/SMTP/IMAP”
3.如所示,上面紅框的兩個必須勾選上,如沒有勾選,要選擇開啟就可以勾選上了,然後可以看到下面紅框裡是:SMTP伺服器: smtp.163.com
實現代碼
經過上面的設定後就將環境調試好了,下面就可以實現代碼了,推薦使用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伺服器,連接埠是2516 server.login(my_sender,"寄件者郵箱密碼") #括弧中對應的是寄件者郵箱帳號、郵箱密碼17 server.sendmail(my_sender,[my_user,],msg.as_string()) #括弧中對應的是寄件者郵箱帳號、收件者郵箱帳號、發送郵件18 server.quit() #這句是關閉串連的意思19 except Exception: #如果try中的語句沒有執行,則會執行下面的ret=False20 ret=False21 return ret22 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