python下載郵件

一直想用qt來寫一個(gè)郵件客戶端的任洞,但是c++下面總也找不到能運(yùn)行的demo韵卤,只好找了個(gè)python的了财边,需要運(yùn)行在python2.7下面氧苍,轉(zhuǎn)來的代碼夜矗,如下:

#-*- encoding: utf-8 -*-
#author : rayment
#CreateDate : 2013-01-24`

import imaplib
import email
#設(shè)置命令窗口輸出使用中文編碼
import sys
reload(sys)
sys.setdefaultencoding('gbk')

#保存文件方法(都是保存在指定的根目錄下)
def savefile(filename, data, path):
    try:
        filepath = path + filename
        print('Saved as ' + filepath)
        f = open(filepath, 'wb')
    except:
        print('filename error')
        f.close()
    f.write(data)
    f.close()
   
#字符編碼轉(zhuǎn)換方法
def my_unicode(s, encoding):
    if encoding:
        return unicode(s, encoding)
    else:
        return unicode(s)

#獲得字符編碼方法
def get_charset(message, default="ascii"):
    #Get the message charset
    return message.get_charset()
    return default

#解析郵件方法(區(qū)分出正文與附件)
def parseEmail(msg, mypath):
    mailContent = None
    contenttype = None
    suffix =None
    for part in msg.walk():
        if not part.is_multipart():
            contenttype = part.get_content_type()   
            filename = part.get_filename()
            charset = get_charset(part)
            #是否有附件
            if filename:
                h = email.Header.Header(filename)
                dh = email.Header.decode_header(h)
                fname = dh[0][0]
                encodeStr = dh[0][1]
                if encodeStr != None:
                    if charset == None:
                        fname = fname.decode(encodeStr, 'gbk')
                    else:
                        fname = fname.decode(encodeStr, charset)
                data = part.get_payload(decode=True)
                print('Attachment : ' + fname)
                #保存附件
                if fname != None or fname != '':
                    savefile(fname, data, mypath)            
            else:
                if contenttype in ['text/plain']:
                    suffix = '.txt'
                if contenttype in ['text/html']:
                    suffix = '.htm'
                if charset == None:
                    mailContent = part.get_payload(decode=True)
                else:
                    mailContent = part.get_payload(decode=True).decode(charset)         
    return  (mailContent, suffix)

#獲取郵件方法
def getMail(mailhost, account, password, diskroot, port = 993, ssl = 1):
    mypath = diskroot + ':\\'
    #是否采用ssl
    if ssl == 1:
        imapServer = imaplib.IMAP4_SSL(mailhost, port)
    else:
        imapServer = imaplib.IMAP4(mailhost, port)
    imapServer.login(account, password)
    imapServer.select()
    #郵件狀態(tài)設(shè)置,新郵件為Unseen
    #Message statues = 'All,Unseen,Seen,Recent,Answered, Flagged'
    resp, items = imapServer.search(None, "All")
    number = 1
    for i in items[0].split():
       #get information of email
       resp, mailData = imapServer.fetch(i, "(RFC822)")   
       mailText = mailData[0][1]
       msg = email.message_from_string(mailText)
       ls = msg["From"].split(' ')
       strfrom = ''
       if(len(ls) == 2):
           fromname = email.Header.decode_header((ls[0]).strip('\"'))
           strfrom = 'From : ' + my_unicode(fromname[0][0], fromname[0][1]) + ls[1]
       else:
           strfrom = 'From : ' + msg["From"]
       strdate = 'Date : ' + msg["Date"]
       subject = email.Header.decode_header(msg["Subject"])
       sub = my_unicode(subject[0][0], subject[0][1])
       strsub = 'Subject : ' + sub
             
       mailContent, suffix = parseEmail(msg, mypath)
       #命令窗體輸出郵件基本信息
       print('\n')
       print('No : ' + str(number))
       print(strfrom)
       print(strdate)
       print(strsub)

       #保存郵件正文
       if (suffix != None and suffix != '') and (mailContent != None and mailContent != ''):
           savefile(str(number) + suffix, mailContent, mypath)
           number = number + 1
           
    imapServer.close()
    imapServer.logout()

if __name__ =="__main__":
    #郵件保存在e盤
    mypath ='e'
    print('begin to get email...')
    #getMail('pop.gmail.com', '***@gmail.com', 'xxxxx', mypath, 993, 1)
    #qq郵箱登陸用ssl让虐,注意下面的xxxxxx是qq郵箱的imap授權(quán)碼紊撕,要在qq郵箱里設(shè)置
    getMail('imap.qq.com', '***@qq.com', 'xxxxxx', mypath, 993, 1)
    print('the end of get email.')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赡突,隨后出現(xiàn)的幾起案子对扶,更是在濱河造成了極大的恐慌,老刑警劉巖惭缰,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浪南,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漱受,警方通過查閱死者的電腦和手機(jī)络凿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昂羡,“玉大人絮记,你說我怎么就攤上這事∨跋龋” “怎么了怨愤?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛹批。 經(jīng)常有香客問我撰洗,道長(zhǎng),這世上最難降的妖魔是什么腐芍? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任差导,我火速辦了婚禮,結(jié)果婚禮上甸赃,老公的妹妹穿的比我還像新娘柿汛。我一直安慰自己,他們只是感情好埠对,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布络断。 她就那樣靜靜地躺著,像睡著了一般项玛。 火紅的嫁衣襯著肌膚如雪貌笨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天襟沮,我揣著相機(jī)與錄音锥惋,去河邊找鬼昌腰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膀跌,可吹牛的內(nèi)容都是我干的遭商。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼捅伤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼劫流!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丛忆,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤祠汇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后熄诡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體可很,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年凰浮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了我抠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡导坟,死狀恐怖屿良,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惫周,我是刑警寧澤尘惧,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站递递,受9級(jí)特大地震影響喷橙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜登舞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一贰逾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菠秒,春花似錦疙剑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至禁灼,卻和暖如春管挟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弄捕。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工僻孝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留导帝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓穿铆,卻偏偏與公主長(zhǎng)得像您单,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子悴务,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,846評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理睹限,服務(wù)發(fā)現(xiàn)譬猫,斷路器讯檐,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 從開學(xué)到現(xiàn)在,日子過的平淡無奇染服。 最近網(wǎng)上流傳了這么一段話:‘我會(huì)和你拍很多的照片别洪,帶你去很多的地方,等你未...
    自然也是一種范er閱讀 285評(píng)論 0 0
  • 照鏡子了嗎 鏡明光亮 映上這張臉 似 渡了蠟 惹了灰 蒙了塵 以此同時(shí) 木棉 杜鵑 紫荊 時(shí)節(jié)一到 該開放的 開得...
    立筆閱讀 157評(píng)論 0 1