標籤:
python 操作郵件,不是很方便,說實話還不是理解的特別透徹,這次想把自己碰到的東西總結下來
郵件有imap,pop,imap協議,這次使用的是imap4協議,主要用了imap4和mail類,
代碼主要參考了http://blog.csdn.net/bonnshore/article/details/8729984,裡面寫的很詳細,可以實現收發郵件
下面把主要的代碼貼一下:
初始化,定義郵件伺服器
self.IMAP_SERVER=‘imap.gmail.com‘ self.IMAP_PORT=993 self.M = None self.response self.mailboxes = []
登入,選擇mailbox:
self.M = imaplib.IMAP4_SSL(self.IMAP_SERVER, self.IMAP_PORrc, self.response = self.M.login(username, password)tye,data = m.M.select()
郵件搜尋:
ret, msgnums = m.M.search(None, ‘BODY‘, datapath)
擷取郵件資訊:
status, response = self.M.fetch(id,"(RFC822)")mailText = response[0][1]mail_message = email.message_from_string(mailText)subject = unicode(email.Header.make_header(email.Header.decode_header(mail_message[‘subject‘])))#print "subject_________:" +subjectmail_from = email.utils.parseaddr(mail_message["from"])[1]mail_to = email.utils.parseaddr(mail_message["to"])[1]time = mail_message[‘Date‘]print ‘[‘+mail_message[‘Date‘]+‘]‘+‘\n‘+‘From:‘+mail_from+ ‘ To:‘+mail_to+‘\n‘+‘Subject:‘+subject+‘\n‘return self.get_first_text_block(mail_message), subject, mail_from, time
maintype = email_message_instance.get_content_maintype() 返回郵件裡的內容是何種類型,若為text就比較好處理,如果是multipart,還得遍曆email_message_instance去根據不同類型處理。
email.message_from_string(mailText)返回了一個結構體,裡麵包含了郵件的基本資料
郵件裡比較蛋疼的是字串編碼的問題,畢竟大家的郵件格式都不一樣,有些是unicode,有些是utf-8,有些是gb2312,還有附件,圖片等多種格式,
當然這次也只處理了文本,暫時沒有需求去處理附件和圖片這些。我都是統一將字元轉成unicode去處理的。
字串處理的時候,可以使用chardet判斷字串類型,讀寫檔案的時候可以用codecs指定讀寫的字元集類型
另外貼上值得參考的python處理郵件的文章;
http://www.programcreek.com/python/example/58598/email.message.as_string (處理郵件的一些例子)
https://tools.ietf.org/html/rfc3501#section-6.4.4 (郵件搜尋的參考)
python 郵件基礎篇