python 操作邮件,不是很方便,说实话还不是理解的特别透彻,这次想把自己碰到的东西总结下来

邮件有imap,pop,imap协议,这次使用的是imap4协议,主要用了imap4和mail类,

代码主要参考了http://blog.csdn.net/bonnshore/article/details/8729984,里面写的很详细,可以实现收发邮件

下面把主要的代码贴一下:

初始化,定义邮件服务器

  1. self.IMAP_SERVER='imap.gmail.com'
  2. self.IMAP_PORT=993
  3. self.M = None
  4. self.response
  5. self.mailboxes = []

登录,选择mailbox:

  1. self.M = imaplib.IMAP4_SSL(self.IMAP_SERVER, self.IMAP_POR
  2. rc, self.response = self.M.login(username, password)
  3. tye,data = m.M.select()

邮件搜索:

  1. ret, msgnums = m.M.search(None, 'BODY', datapath)

获取邮件信息:

  1. status, response = self.M.fetch(id,"(RFC822)")
  2. mailText = response[0][1]
  3. mail_message = email.message_from_string(mailText)
  4. subject = unicode(email.Header.make_header(email.Header.decode_header(mail_message['subject'])))
  5. #print "subject_________:" +subject
  6. mail_from = email.utils.parseaddr(mail_message["from"])[1]
  7. mail_to = email.utils.parseaddr(mail_message["to"])[1]
  8. time = mail_message['Date']
  9. print '['+mail_message['Date']+']'+'\n'+'From:'+mail_from+ ' To:'+mail_to+'\n'+'Subject:'+subject+'\n'
  10. 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 (邮件搜索的参考)

python 邮件基础篇的更多相关文章

  1. python+selenium基础篇,切入切出frame

    1.首先制作一个html的文件,代码如下 <!DOCTYPE html> <html> <head> <title>Frame_test</tit ...

  2. [python面向对象]--基础篇

    1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() ...

  3. Python学习——基础篇

    1.python的安装     python下载地址:https://www.python.org/downloads/     安装完成后,运行cmd.exe,输入python     如果出现“p ...

  4. python正则表达式基础篇

    1.正则表达式基础 1.1简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大 ...

  5. Python学习—基础篇之文件操作

    文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...

  6. Python+Selenium基础篇之5-第一个完整的自动化测试脚本

    前面文章,我们介绍了如何采用XPath表达式去定位网页元素,在掌握了如何抓取或者如何书写精确的XPath表达式后,我们可以开始写自己的第一个真正意义上的webui 自动化测试脚本,就相当于,你在学习P ...

  7. 第五篇:Python函数基础篇

    本篇介绍什么是函数.函数的特性.函数的定义.函数的调用.以及函数的参数.以及关于全局变量和局部变量的使用等等. 一.什么是函数: 函数是最基本的一种代码抽象方式,为了实现某种特定的功能而组织的带名字的 ...

  8. 十六、python面向对象基础篇

    面向对象基础: 在了解面向对象之前,先了解下变成范式: 编程范式是一类典型的编程风格,是一种方法学 编程范式决定了程序员对程序执行的看法 oop中,程序是一系列对象的相互作用 python支持多种编程 ...

  9. Python ( 学习基础篇 第二部 )

    目录 运算符 算数运算符 比较运算符 赋值运算符 位运算符 逻辑运算符 成员运算符 身份运算符 Python 中运算符的优先级 运算符总结基础语法 判断类型 isinstence 代码块 流程控制 w ...

随机推荐

  1. linux 查找文件和搜索文件

    按照文件名搜索 find . -name 'file name' grep -lr 'content'  filepath

  2. iOS 图片文件格式判断、圆角图片

    1.圆角图片 // 设置圆形图片(放到分类中使用) - (UIImage *)cutCircleImage { UIGraphicsBeginImageContextWithOptions(self. ...

  3. 闲来无事,写个基于TCP协议的Socket通讯Demo

    .Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...

  4. 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持

    一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...

  5. 算法_bitmap算法

    概述 所谓bitmap就是用一个bit位来标记某个元素对应的value,而key即是这个元素.由于采用bit为单位来存储数据,因此在可以大大的节省存储空间     算法思想 32位机器上,一个整形,比 ...

  6. Sublime Text3的安装

    作为一名前端开发小白,使用Sublime两年多了,从当初的Sublime Text 2到如今的Sublime Text 3,非常喜欢这款轻量级编译器,它不像Dreamweaver那样动辄几百M,只有仅 ...

  7. Markdown 语法总结

    Markdown 语法总结 Markdown是一个神奇的语言,他比html简单,它巧妙地将内容和格式结合起来.很多平台支持Markdown语法编辑,比如github.博客园等. 下面总结一Markdo ...

  8. java-JDBC从数据库中读取数据并进行日期民族男女的转换

    代码如下: package com.itnba.maya.mysql; import java.sql.*; import java.text.SimpleDateFormat; public cla ...

  9. Unity3D 与android交互流程步骤

    1.Android端代码可以在Eclipse中开发(AndroidStudio没有试,应该也可以) 2.Unity3D端代码要在Unity中开发 3.Android和Unity3D端,两边都需要加入一 ...

  10. 思科交换机配置DHCP的四个方面

    这里我们主要讲解了思科交换机配置DHCP的相关内容.我们对网络拓扑先进行一下了解,然后对于其在进行一下说明,之后对于配置的代码和命令再进行一下解析. 思科交换机配置DHCP一.网络拓扑 思科交换机配置 ...