Python邮箱客户端编写之接收邮件操作
2013-08-12 19:37
513 查看
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()方法将信息存入磁盘文件中。
实例代码如下:
首先需要导入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 poplib import email import email.header import email.utils import cPickle server = "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
相关文章推荐
- Python邮箱客户端编写之接收邮件操作
- Python邮件客户端编写之wxPython树形控件
- Ubuntu 邮件客户端—Evolution 设置全解+备份还原操作+QQ 邮箱收取设置
- 开源:我的Android新闻客户端,速度快、体积小、支持离线阅读、操作简便、内容展现形式丰富多样、信息量大、功能全面 等(要代码的留下邮箱)
- python之TCP客户端和服务器端编写
- 使用Zabbix服务端本地邮箱账号发送报警邮件及指定报警邮件操作记录
- 利用 POP3 协议和套接字编写接收邮件的程序
- python登录pop3邮件服务器接收邮件的方法
- VC++ 使用ShellExecute函数调用邮箱客户端发送邮件(可以带附件)
- python编写socket服务器和客户端
- c#如何使用socket发送一条记录再接收一条记录,服务器端及客户端如何编写,初学。。最好有代码,谢谢!
- 通过python操作smtplib模块发送邮件
- Python入门:socket连续接收客户端数据
- 编写定时监控salt和客户端之间的通信状态并发邮件报警----- saltstack
- 使用腾讯电子邮件,邮箱的一部分是无法接收正常邮件的问题
- Python基础--第4章 变量与操作——编写代码的基石
- 基于Lumisoft.NET组件的POP3邮件接收和删除操作
- 添加邮箱如何填【接收邮件服务器(POP)】
- Exchange2007 恢复被删除邮件之客户端操作