最近通過python寫了一個小的用例凌盯,現(xiàn)在demo基本上完成了付枫,把用到的知識進行下梳理烹玉。
內容就由近到遠吧,因為眼前用過的是最熱乎的阐滩,也就是標題所說明的二打,發(fā)送郵件。
常用的電子郵件協(xié)議(此內容來自百度百科電子郵件協(xié)議)
常用的電子郵件協(xié)議有SMTP掂榔、POP3继效、IMAP4,它們隸屬于TCP/IP協(xié)議簇装获,默認狀態(tài)下瑞信,分別通過TCP端口25、110穴豫、143建立連接凡简。
協(xié)議類型
SMTP協(xié)議
SMTP的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協(xié)議精肃。它是一組用于從源地址到目的地址傳輸郵件的規(guī)范秤涩,通過它來控制郵件的中轉方式。SMTP 協(xié)議屬于TCP/IP協(xié)議簇司抱,它幫助每臺計算機在發(fā)送或中轉信件時找到下一個目的地筐眷。SMTP 服務器就是遵循SMTP協(xié)議的發(fā)送郵件服務器。SMTP認證习柠,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務器匀谣,這就使得那些垃圾郵件的散播者無可乘之機。增加 SMTP 認證的目的是為了使用戶避免受到垃圾郵件的侵擾资溃。
POP協(xié)議
POP郵局協(xié)議負責從郵件服務器中檢索電子郵件武翎。它要求郵件服務器完成下面幾種任務之一:從郵件服務器中檢索郵件并從服務器中刪除這個郵件;從郵件服務器中檢索郵件但不刪除它肉拓;不檢索郵件后频,只是詢問是否有新郵件到達。POP協(xié)議支持多用戶互聯(lián)網(wǎng)郵件擴展,后者允許用戶在電子郵件上附帶二進制文件卑惜,如文字處理文件和電子表格文件等膏执,實際上這樣就可以傳輸任何格式的文件了,包括圖片和聲音文件等露久。在用戶閱讀郵件時更米,POP命令所有的郵件信息立即下載到用戶的計算機上,不在服務器上保留毫痕。
POP3(Post Office Protocol 3)即郵局協(xié)議的第3個版本,是因特網(wǎng)電子郵件的第一個離線協(xié)議標準征峦。
IMAP協(xié)議
互聯(lián)網(wǎng)信息訪問協(xié)議(IMAP)是一種優(yōu)于POP的新協(xié)議。和POP一樣消请,IMAP也能下載郵件栏笆、從服務器中刪除郵件或詢問是否有新郵件,但IMAP克服了POP的一些缺點臊泰。例如蛉加,它可以決定客戶機請求郵件服務器提交所收到郵件的方式,請求郵件服務器只下載所選中的郵件而不是全部郵件缸逃≌爰ⅲ客戶機可先閱讀郵件信息的標題和發(fā)送者的名字再決定是否下載這個郵件。通過用戶的客戶機電子郵件程序需频,IMAP可讓用戶在服務器上創(chuàng)建并管理郵件文件夾或郵箱丁眼、刪除郵件、查詢某封信的一部分或全部內容昭殉,完成所有這些工作時都不需要把郵件從服務器下載到用戶的個人計算機上苞七。
支持種IMAP的常用郵件客戶端有:ThunderMail,Foxmail,Microsoft Outlook等。
傳輸方式
Internet上傳送電子郵件是通過一套稱為郵件服務器的程序進行硬件管理并儲存的饲化。與個人計算機不同莽鸭,這些郵件服務器及其程序必須每天24小時不停地運行,否則就不能收發(fā)郵件了吃靠,簡單郵件傳輸協(xié)議SMTP(Simple Mail Transfer Protocol)和郵局協(xié)議POP(Post Office Protocol)是負責用客戶機/服務器模式發(fā)送和檢索電子郵件的協(xié)議硫眨。
用戶計算機上運行的電子郵件客戶機程序請求郵件服務器進行郵件傳輸,郵件服務器采用簡單郵件傳輸協(xié)議標準巢块。很多郵件傳輸工具礁阁,如outlook express、fox mail等族奢,都遵守SMTP標準并用這個協(xié)議向郵件服務器發(fā)送郵件姥闭。SMTP協(xié)議規(guī)定了郵件信息的具體格式和郵件的管理方式。
郵箱設置
為了能夠實時監(jiān)聽變化越走,我選擇了郵箱來接收變化信息棚品。這里靠欢,我們需要兩個郵箱,一個用來發(fā)送變化信息铜跑,一個用來接收變化信息门怪。這里,我使用了163郵箱進行了發(fā)送者锅纺。
開啟SMTP功能
首先登錄郵箱掷空,設置--POP3/SMTP/IMAP開啟SMTP功能。
客戶端授權密碼
為了我們的賬戶安全囤锉,建議在郵箱中坦弟,開啟一個客戶端的授權密碼,來供我們發(fā)送郵件時官地,登錄使用酿傍。操作如下圖:
Python代碼實現(xiàn)
上面的步驟完成,接下來就是代碼實現(xiàn)区丑。
# 倒入相關庫
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr,formataddr
import smtplib
# encode方法
def format_addr(s):
name,addr = parseaddr(s)
return formataddr((Header(name,'utf-8').encode(),addr))
# 發(fā)送郵件方法
def send_email(title, subject, content):
#發(fā)送者的郵箱地址
from_addr = 'l**********@163.com'
#授權密碼
from_pwd = 's**********'
#接受者郵箱地址
to_addr = 'l************@qq.com'
#smtp服務器地址
smtp_server = 'smtp.163.com'
#發(fā)送內容設置
msg = MIMEText(content, 'plain', 'utf-8')
msg['From'] = format_addr('<%s>'%from_addr)
msg['To'] = format_addr('Re<%s>'%to_addr)
msg['Subject'] = Header(subject, 'utf-8').encode()
#發(fā)送郵件 服務器和端口配置
smtp = smtplib.SMTP_SSL(smtp_server,465)
#測試環(huán)境下拧粪,打印出交互信息
smtp.set_debuglevel(1)
#登錄賬戶
smtp.login(from_addr, from_pwd)
#發(fā)送郵件內容
#正文是一個str修陡,as_string()把MIMEText對象變成str
smtp.sendmail(from_addr,to_addr,msg.as_string())
smtp.quit()
print 'email send success!'
return
接收郵箱查看
在接收郵箱查看下沧侥,看您發(fā)送的內容是否成功接收到了呢?好了魄鸦,今天的內容就到這里了宴杀!
參考內容:百度百科,百度知道等拾因。
上面代碼為markdown下直接敲入的旺罢,有的可能沒有驗證,可能出現(xiàn)關鍵字書寫錯誤绢记,如果直接拷貝出現(xiàn)錯誤扁达,歡迎留言,謝謝4老ā9蚪狻!??