poplib模塊接收郵件
python的poplib模塊是用來(lái)從pop3收取郵件的,也可以說(shuō)它是處理郵件的第一步。
POP3協(xié)議并不復(fù)雜,它也是采用的一問(wèn)一答式的方式,你向服務(wù)器發(fā)送一個(gè)命令,服務(wù)器必然會(huì)回復(fù)一個(gè)信息。pop3命令碼如下:
命令 poplib方法 參數(shù) 狀態(tài) 描述-----------------------------------------------------------------------------------------------USER user username 認(rèn)可 用戶名,此命令與下面的pass命令若成功,將導(dǎo)致?tīng)顟B(tài)轉(zhuǎn)換PASS pass_ password 認(rèn)可 用戶密碼 APOP apop Name,Digest 認(rèn)可 Digest是MD5消息摘要-----------------------------------------------------------------------------------------------STAT stat None 處理 請(qǐng)求服務(wù)器發(fā)回關(guān)于郵箱的統(tǒng)計(jì)資料,如郵件總數(shù)和總字節(jié)數(shù)UIDL uidl [Msg#] 處理 返回郵件的唯一標(biāo)識(shí)符,POP3會(huì)話的每個(gè)標(biāo)識(shí)符都將是唯一的LIST list [Msg#] 處理 返回郵件數(shù)量和每個(gè)郵件的大小RETR retr [Msg#] 處理 返回由參數(shù)標(biāo)識(shí)的郵件的全部文本DELE dele [Msg#] 處理 服務(wù)器將由參數(shù)標(biāo)識(shí)的郵件標(biāo)記為刪除,由quit命令執(zhí)行RSET rset None 處理 服務(wù)器將重置所有標(biāo)記為刪除的郵件,用于撤消DELE命令TOP top [Msg#] 處理 服務(wù)器將返回由參數(shù)標(biāo)識(shí)的郵件前n行內(nèi)容,n必須是正整數(shù)NOOP noop None 處理 服務(wù)器返回一個(gè)肯定的響應(yīng)----------------------------------------------------------------------------------------------QUIT quit None 更新
python的poplib也針對(duì)這些命令分別提供了對(duì)應(yīng)的方法,上面在第二列里已經(jīng)標(biāo)出來(lái)。收取郵件的過(guò)程一般是:
1. 連接pop3服務(wù)器 (poplib.POP3.__init__)
2. 發(fā)送用戶名和密碼進(jìn)行驗(yàn)證 (poplib.POP3.user poplib.POP3.pass_)
3. 獲取郵箱中信件信息 (poplib.POP3.stat)
4. 收取郵件 (poplib.POP3.retr)
5. 刪除郵件 (poplib.POP3.dele)
6. 退出 (poplib.POP3.quit)
注意的是,上面我在括號(hào)里寫(xiě)的是使用什么方法來(lái)完成這個(gè)操作,在實(shí)際的代碼中不能那樣寫(xiě),應(yīng)該是創(chuàng)建poplib.POP3的對(duì)象,然后,調(diào)用這個(gè)對(duì)象的方法。比如:
poplib.POP3.quit
應(yīng)該理解為
a = poplib.POP3(host)a.quit()
下面看看實(shí)際的代碼:
#-*- encoding: gb2312 -*-import os, sys, stringimport poplib# pop3服務(wù)器地址host = "pop3.163.com"# 用戶名username = "xxxxxx@163.com"# 密碼password = "xxxxxxx"# 創(chuàng)建一個(gè)pop3對(duì)象,這個(gè)時(shí)候?qū)嶋H上已經(jīng)連接上服務(wù)器了pp = poplib.POP3(host)# 設(shè)置調(diào)試模式,可以看到與服務(wù)器的交互信息pp.set_debuglevel(1)# 向服務(wù)器發(fā)送用戶名pp.user(username)# 向服務(wù)器發(fā)送密碼pp.pass_(password)# 獲取服務(wù)器上信件信息,返回是一個(gè)列表,第一項(xiàng)是一共有多上封郵件,第二項(xiàng)是共有多少字節(jié)ret = pp.stat()print ret# 需要取出所有信件的頭部,信件id是從1開(kāi)始的。for i in range(1, ret[0]+1): # 取出信件頭部。注意:top指定的行數(shù)是以信件頭為基數(shù)的,也就是說(shuō)當(dāng)取0行, # 其實(shí)是返回頭部信息,取1行其實(shí)是返回頭部信息之外再多1行。 mlist = pp.top(i, 0) print 'line: ', len(mlist[1])# 列出服務(wù)器上郵件信息,這個(gè)會(huì)對(duì)每一封郵件都輸出id和大小。不象stat輸出的是總的統(tǒng)計(jì)信息ret = pp.list()print ret# 取第一封郵件完整信息,在返回值里,是按行存儲(chǔ)在down[1]的列表里的。down[0]是返回的狀態(tài)信息down = pp.retr(1)print 'lines:', len(down)# 輸出郵件for line in down[1]: print line# 退出pp.quit()
在有些地方,有安全郵件這一說(shuō),其實(shí)是對(duì)pop3做了ssl加密。這樣的,poplib一樣可以處理,只不過(guò)不是用POP3這個(gè)類,而是用POP3_SSL, 他們的方法都一樣。因此支持ssl在上面代碼中,替換創(chuàng)建pop3對(duì)象的一行為:
pp = poplib.POP3_SSL(host)
smtplib: 用python發(fā)送SSL/TLS安全郵件
python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對(duì)smtp協(xié)議進(jìn)行了簡(jiǎn)單的封裝。
smtp協(xié)議的基本命令包括:
一般smtp會(huì)話有兩種方式,一種是郵件直接投遞,就是說(shuō),比如你要發(fā)郵件 主站蜘蛛池模板: 阳朔县| 陆河县| 昆明市| 丰顺县| 库伦旗| 平原县| 友谊县| 龙泉市| 杭州市| 鄂尔多斯市| 威信县| 临夏县| 凭祥市| 喀喇沁旗| 玉门市| 濉溪县| 大丰市| 华阴市| 铁岭县| 赣州市| 株洲市| 潜江市| 平武县| 云梦县| 吉首市| 滨海县| 交口县| 乳源| 甘德县| 桐乡市| 鹿泉市| 朝阳县| 肇庆市| 自治县| 红河县| 荃湾区| 阜南县| 普兰店市| 阿尔山市| 常州市| 迁安市|