python 邮件基础篇

时间:2023-03-09 00:54:37
python 邮件基础篇

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 (邮件搜索的参考)