python 操作郵件,不是很方便,說實話還不是理解的特別透徹,這次想把自己碰到的東西總結下來 郵件有imap,pop,imap協議,這次使用的是imap4協議,主要用了imap4和mail類, 代碼主要參考了http://blog.csdn.net/bonnshore/article/detail ...
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_POR rc, 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_________:" +subject mail_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 (郵件搜索的參考)