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

时间: 2024-11-08 19:22:21

python 邮件基础篇的相关文章

问道python之基础篇【二】python入门

问道python之基础篇[二] Python入门 1.python的工作过程 python解释器把源代码转换为字节码的中间形式,然后再把它翻译成机器使用的机器语言并运行. 2.pyc文件 2.1.什么是pyc文件 执行python代码时,如果导入了其他的.py文件,那么在执行过程中会自动生成一个与其同名的.pyc文件,该文件就是python解释器编译之后产生的字节码. ps:代码经过编译可以产生字节码:字节码通过反编译也可以得到代码. Pyc文件一般由3个部分组成: 最开始4个字节是一个Maig

问道python之基础篇【一】 认识python

问道python之基础篇[一] 认识python 1.python的简介 1.1.什么是python? Python是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python语法简洁清晰,特色之一是强制用空白符作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够用其他语言制作的各种模块(尤其是C++)很轻松地联结在一起. 1.2.python的特点 简单,易学,免费.开源,高层语言,移植性,

Python学习基础篇第一篇——快速入门(适合初学者)

一.Python学习基础篇第一篇--(快速入门) 建议从Python2.7开始学习,Python2.7可以支持扩展大量的第三方类库,是目前比较成熟的版本 编写代码的软件推荐将python自带的IDLE和PyCharm集成IDE结合起来使用 1.1 Python命令行 Python命令行将以 >>> 开始,比如 >>>print 'Hello World!' 对于验证简单的命令可以在python自带的IDLE中完成  1.2 在Python自带的IDLE写一段小程序 在所

Python之基础篇(三)

基础篇之三: 一,数据类型之set. 总结:set无序,不重复. 1,创建set: s = {1,2,3} print(s,type(s)) list1 = [1,2,3] s1=(list1) print(s1,type(list1)) s2 = set() print(s2,type(s2)) {1, 2, 3} <class 'set'> [1, 2, 3] <class 'list'> set() <class 'set'> 2,set方法 1,添加元素:(s.

Python学习-基础篇11 前端知识之HTML内容

HTML介绍 Web服务本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5) while True: conn, addr = sk.accept() data = conn.recv(8096) conn.send(b"HTTP/1.1 200 OK\r\n\r\n") conn.secd(b"<h1>Hello world!</h

python之基础篇(五)——数据类型

防伪码:忘情公子著 前面四篇我们已经讲了许多概念方面的东西,从此篇开始,我们将真正开始学习python. 在上一篇中,我们已经说过python有哪些核心数据类型,接下来我们将一一细说这些数据类型. python数据类型之数字类型 python使用5种数字类型:布尔型.整型.长整型.浮点型和复数,所有数字类型均为不可变对象. math模块是python中专门用来实现高级算术运算的模块. 数字支持以下操作: +:加法 -:减法 *:乘法 /:除法 //:截断除法 **:乘方 %:取模 -=:一元减法

python之基础篇(四)

防伪码:忘情公子著 本篇我们来说说python的内置对象类型及其运算. python有许多的内置类型,我们为什么要使用内置类型呢?python编程时是尽量去使用自定义类型还是尽可能多的使用内置类型呢? 内置类型对python本身来讲它的理解能力更好一点,对其执行时所能够带来的性能上也会更好一点.所以,除非内置类型无法提供特殊对象处理时,一般而言最好都用内置类型.因为内置类型使得其内置对象程序更容易编写,另外,内置类型.内置对象是扩展组件,内置对象往往比自己开发的那种数据结构,在执行时更有效率.

Python笔记基础篇-Day6

面向过程 VS 面向对象 编程范式编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式. 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式. 两种最重要的编程范式分别是面向过程

Python学习基础篇—文件操作和集合

这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 我们哭了 我们笑着 我们抬头望天空 星星还亮着几颗 我们唱着 时间的歌 才懂得相互拥抱 到底是为了什么 因为我刚好遇见你 留下足迹才美丽 风吹花落泪如雨 因为不想分离 因为刚好遇见你 留下十年的期许 如果再相遇 我想我会记得你 我们哭了 我们笑着 我们抬头望天空 星星还亮着几颗 我们唱着 时间的歌 才懂得相互