在搜索python教程的時候,碰巧遇到了“利用python發送電子郵件”的教程,覺得很實用也比較有意思,所以就花了點時間學習發送郵件的腳本是怎樣實現的。我主要是利用SMTP(簡單郵件傳輸協議)來實現郵件的發送。
首先要安裝SMTP和email的庫
運行cmd,輸入:
pip install secure-smtplib
和
pip install email
這樣我們所需的庫就安裝好了。
網上大部分的教程,說什么好呢,有些時候我真的很奇怪,他們在寫完教程以后會不會再按著自己的教程運行一遍,因為我一步一步按著教程做下來,還是會提示我各種錯誤,猝不及防。不過這個教程遇到的錯誤,最終還是解決了,因為解決辦法是在手機上搜到的,那份教程找不到,網站就貼不上來了。進入正題,貼代碼:
#coding: utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = raw_input("Please enter a sender email address:\n> ") #“我”的郵箱
password = raw_input("keywords:\n> ") #密碼
receiver = raw_input("Please enter a receiver address:\n> ") #接收者郵箱
subject = raw_input("Title:\n> ") #郵件標題
words = raw_input("Text:\n> ") #郵件正文
smtpserver = 'smtp.163.com'
msg = MIMEText(words, 'plain', 'utf-8')#中文需參數‘utf-8',單字節字符不需要
msg['Subject'] = Header(subject, 'utf-8') #郵件標題
msg['from'] = sender #發信人地址
msg['to'] = receiver #收信人地址
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(sender, password)
smtp.sendmail(sender, receiver, msg.as_string()) #這行代碼解決的下方554的錯誤
smtp.quit()
print "郵件發送成功!"
這個腳本比較簡單,但是可以發送成功,網上有些教程運行會提示錯誤:
554 DT:SPM 發送的郵件內容包含了未被許可的信息,或被系統識別為垃圾郵件。請檢查是否有用戶發送病毒或者垃圾郵件;
在上邊代碼標注了,我找到的解決辦法主要和那行代碼有關系,為什么我還沒有弄明白。這段代碼還有一個缺點是郵件的標題只能為英文,如果換成中文的話會提示編碼錯誤:
UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xb1 in position 0: invalid start byte
需要注意的是,如果你用的是163郵箱,需要設置客戶端授權密碼。
郵箱客戶端授權密碼
在“設置”里找到“客戶端授權密碼”,開啟并輸入你要設置的密碼,在python代碼中用到的密碼就是你設置的“客戶端授權密碼”。
測試效果:
郵件測試