Python邮箱客户端编写之接收邮件操作

来源:互联网 发布:php商城分销系统源码 编辑:程序博客网 时间:2024/04/30 08:14

Python的POP3类有很多方法来管理邮箱。

首先需要导入poplib库,import poplib

POP3(server) 连接到邮箱服务器

user(username)将用户名发送至服务器,等候服务器的正在等候用户密码的返回信息

pass_(password)将密码发送至服务器,进行登录。如果登录失败,会引发异常。

stat() 返回长度为2的元组:分别表示邮箱中邮件的数量、邮件消息的总大小(字节数)。

list() 返回长度为3的元组,分别表示服务器的返回信息、消息列表、返回信息的大小。

retr(messagenumber)返回长度为3的元组,分别表示服务器的返回信息、指定标号邮件的所有行、邮件消息的大小(字节数)。

quit() 结束连接并退出。


但是通过retr()方法得到的邮件的所有行消息是没有进行解码的。我们需要采用Python提供的email库来将消息转化为email的实例,从而通过email的方法对邮件进行处理。

email.message_from_string()这个方法可以将string的邮件内容转换成email.message实例。然后通过其他方法将邮件内容(发件人、发件时间、主题、正文等)提取出来。


将相关信息提取出来以后,可以通过cPickle.dump()方法将信息存入磁盘文件中。

实例代码如下:

import poplibimport emailimport email.headerimport email.utilsimport cPickleserver = "server_name"user = "login_name"password = "password"server = poplib.POP3(server)server.user(user)server.pass_(password)mailfrom = []        ret = server.list() #获得邮件列表mailcount = len(ret[1]) #获得邮件列表长度for num in range(1,mailcount):    rsp,msglines,msgsize = server.retr(num) #获取邮件内容    mail = email.message_from_string(string.join(msglines,'\n')) #转化为email.message实例    subject = email.Header.decode_header(mail['subject'])[0][0] #获取邮件主题内容    mail_from = email.utils.parseaddr(mail['From'])[1] #获取发件人邮箱    mail_time = email.Header.decode_header(mail['Date'])[0][0] #获取发件时间    mail_object = DownMessage(mail) #获取邮件正文    fp = file('mail.txt', 'w')    cPickle.dump(mail_from, fp) #将获取的信息存入磁盘文件    cPickle.dump(mail_time, fp)    cPickle.dump(subject, fp)    cPickle.dump(mail_object, fp)    fp.close()    server.quit()#对邮件正文进行解码处理def DownMessage(self,mail):    if mail.is_multipart():        for part in mail.get_payload():            self.DownMessage(part,filename)    else:        types = mail.get_content_type()        charset = mail.get_content_charset()        if types == 'text/plain' or types == 'text/html':            try:                if charset == 'utf_8':                    mailobject = unicode(mail.get_payload(decode=True),charset)                elif charset == None:                    mailobject = mail.get_payload(decode=True)                else:                    mailobject = mail.get_payload(decode=charset).decode(charset)            except:                print 'BLANK'        elif types == 'text/base64':            try:                mailobject = unicode(base64.decodestring(mail.get_payload(),charset))            except:                print 'BLANK'     return mailobject

下一篇简单介绍可用到的wxPython的树形控件Python邮件客户端编写之wxPython树形控件




原创粉丝点击