python想要保存QQ郵箱富途的附件

發(fā)布時(shí)間:2024-02-03
一、前言
對(duì)于編程來(lái)說(shuō),我期望的是并不僅僅用于make money,而是出于生活,融于生活。
最近炒股,每天都會(huì)有一封郵件發(fā)到我的qq郵箱,里面有今天賬戶(hù)的結(jié)算信息,感覺(jué)這個(gè)挺有意義的,可以記錄每天的交易情況和相關(guān)費(fèi)用,但是我又不想每天去下載這個(gè)附件。于是乎花了一個(gè)晚上研究了一下python的poplib庫(kù),完成了一個(gè)拉取qq郵箱附件的程序。
二、實(shí)現(xiàn) 2.1 poplib是什么?
poplib是一個(gè)python的一個(gè)模塊,用于專(zhuān)門(mén)的處理郵箱的郵件,是基于pop3的協(xié)議。 使用的話(huà)用import poplib就可以了。 2.2 代碼說(shuō)明
想要解析郵件分為幾個(gè)步驟:
第一步:創(chuàng)建鏈接
pop_conn = poplib.pop3_ssl(self.host) pop_conn.set_debuglevel(self.debugmode) pop_conn.user(self.user) pop_conn.pass_(self.pass_) 1234
使用poplib庫(kù)創(chuàng)建一個(gè)ssl的鏈接,然后分別設(shè)置這個(gè)connect的幾個(gè)參數(shù),分別是: – debugmode:0為關(guān)閉,1為開(kāi)啟。如果開(kāi)啟的話(huà),會(huì)顯示交互時(shí)的日志。 – username :郵箱的賬號(hào) – password :郵箱的密碼 – host : 對(duì)應(yīng)的郵箱的pop3協(xié)議的host,qq郵箱是pop.qq.com
注:這里有個(gè)坑爹的東西,如果直接用qq密碼用作password的話(huà),會(huì)提示這個(gè)報(bào)錯(cuò) poplib.error_proto: -err please using authorized code to login.
跟著這個(gè)鏈接進(jìn)去看,是因?yàn)閝q出于安全的考慮,使用pop協(xié)議的時(shí)候,需要使用一個(gè)16位的密保來(lái)進(jìn)行操作。按照鏈接里面的提示設(shè)置好了密碼,再填入就可以使用了。
第二步:獲取郵件
幾個(gè)主要的api:
pop_conn.stat() pop_conn.list() pop_conn.retr()123
stat()用于獲取郵件的狀態(tài),例如:有46封郵件
messages: 46. size: 3819672
list()用于獲取郵件的列表狀態(tài):
(‘ ok’, [‘1 196394’, ‘2 35328’, ‘3 195761’, ‘4 19024’, ‘5 63952’, ‘6 196662’, ‘7 45720’, ‘8 197030’, ‘9 15565’, ‘10 36985’, ‘11 2550’, ‘12 31237’, ‘13 26712’, ‘14 18984’, ‘15 15990’, ‘16 12196’, ‘17 21966’, ‘18 194291’, ‘19 194885’, ‘20 126483’, ‘21 14534’, ‘22 29710’, ‘23 196006’, ‘24 13974’, ‘25 34424’, ‘26 195320’, ‘27 202168’, ‘28 24900’, ‘29 22061’, ‘30 7843’, ‘31 53405’, ‘32 7958’, ‘33 7913’, ‘34 200682’, ‘35 5349’, ‘36 15979’, ‘37 34286’, ‘38 53619’, ‘39 198150’, ‘40 25144’, ‘41 7366’, ‘42 196818’, ‘43 214880’, ‘44 196847’, ‘45 18007’, ‘46 194614’], 461)
pop_conn.retr()則是用于獲取每封郵件的狀態(tài)了
第三步:解析郵件
分為兩步:
1、先把pop_conn.retr()獲得的一封郵件格式化一下,把其中的分割符化成”n”(具體這一步的意義我沒(méi)有深究,應(yīng)該是方便email模塊去解析)
messages = ["n".join(mssg[1]) for mssg in messages] 12
注意每個(gè)郵件mssg里面只有mssg[1]是內(nèi)容。
2、然后對(duì)郵件進(jìn)行解析轉(zhuǎn)化成message對(duì)象
messages = [parser().parsestr(mssg) for mssg in messages] 12
3、然后就可以獲取到對(duì)應(yīng)的郵件內(nèi)容了
直接獲取了 主題:msg.get(\\\’subject\\\’) 時(shí)間:msg.get(\\\’date\\\’) 發(fā)件人:email.utils.parseaddr(msg.get(\\\’from\\\’))[1] 收件人:email.utils.parseaddr(msg.get(\\\’to\\\’))[1]12345
不過(guò)這些我都不需要,我只需要里面的附件內(nèi)容。
4、保存附件
for part in msg.walk(): filename = part.get_filename() # 保存附件 if filename: fname = self.decode_str(filename) fex = open("%s%s"%(self.savepath,fname), \\\’wb\\\’) data = part.get_payload(decode=true) fex.write(data) fex.close()12345678910
遍歷一下msg,如果有附件就存下來(lái),這里需要注意的是需要對(duì)文件的名字進(jìn)行解碼。
然后找個(gè)目錄存下來(lái)吧。
有個(gè)問(wèn)題,不知道為什么只能取到最近的一個(gè)月的郵件,有點(diǎn)奇怪,不知道是不是qq郵箱的限制了。
三、源碼
#!/usr/bin/python #-*- encoding: utf-8 -*- # @auth atany 347702498@qq.com # blog : http://blog.csdn.net/yang8456211 import poplib from email.parser import parser from email.header import decode_header from email.utils import parseaddr import email import os import sys reload(sys) sys.setdefaultencoding(\\\’utf-8\\\’) # 默認(rèn)的編碼是ascii.. class mailmanager: # 測(cè)試的郵件數(shù)量 0為所有 testlimitmailcount = 0 def __init__(self, host, username, password, savepath, debugmode = 0): self.host = host self.user = username self.pass_ = password self.debugmode = debugmode self.savepath = savepath def _download_mail(self): print "…n=========
上一個(gè):怎么查美版有鎖無(wú)鎖,才買(mǎi)的美版不太懂有鎖無(wú)鎖怎么看啊有什么區(qū)別嗎
下一個(gè):筆記本排行第一是什么品牌(筆記本電腦排行第一名是哪個(gè))

厚聲0402WGJ047JTCE今日行情、最新報(bào)價(jià)
win10系統(tǒng)怎么查看系統(tǒng)激活(window10怎么看系統(tǒng)激活)
怎么查蘋(píng)果6s電池容量,iphone6s如何查看電池容量
樹(shù)木的開(kāi)花期可分為哪幾個(gè)時(shí)期?
模擬海拔高度測(cè)試設(shè)備的密封性能
西安營(yíng)銷(xiāo)型網(wǎng)站制作過(guò)程有哪些?
阿里云服務(wù)器怎么自己搭建網(wǎng)站
簽退房合同要注意什么
手機(jī)網(wǎng)站建站有哪些方面需要注意?手機(jī)網(wǎng)站建站公司哪家好?
民用建筑臺(tái)階、坡道和欄桿有哪些設(shè)計(jì)規(guī)定?
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos