Python实现读取邮箱中的邮件功能示例【含文本及附件】


Posted in Python onAugust 05, 2017

本文实例讲述了Python实现读取邮箱中的邮件功能。分享给大家供大家参考,具体如下:

#-*- encoding: utf-8 -*-
import sys
import locale
import poplib
from email import parser
import email
import string
# 确定运行环境的encoding
__g_codeset = sys.getdefaultencoding()
if "ascii"==__g_codeset:
  __g_codeset = locale.getdefaultlocale()[1]
#
def object2double(obj):
  if(obj==None or obj==""):
    return 0
  else:
    return float(obj)
  #end if
#
def utf8_to_mbs(s):
  return s.decode("utf-8").encode(__g_codeset)
#
def mbs_to_utf8(s):
  return s.decode(__g_codeset).encode("utf-8")
#
host = 'pop.exmail.qq.com'
username = 'user1@xxxx.cn'
password = 'password'
pop_conn = poplib.POP3_SSL(host)
pop_conn.user(username)
pop_conn.pass_(password)
#Get messages from server:
# 获得邮件
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
#print messages
#print "--------------------------------------------------"
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#print messages
#Parse message intom an email object:
# 分析
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
i = 0
for index in range(0,len(messages)):
  message = messages[index];
  i = i + 1;
  subject = message.get('subject')
  h = email.Header.Header(subject)
  dh = email.Header.decode_header(h)
  subject = unicode(dh[0][0], dh[0][1]).encode('utf8')
  mailName = "mail%d.%s" % (i, subject)
  f = open('%d.log'%(i), 'w');
  print >> f, "Date: ", message["Date"]
  print >> f, "From: ", email.utils.parseaddr(message.get('from'))[1]
  print >> f, "To: ", email.utils.parseaddr(message.get('to'))[1]
  print >> f, "Subject: ", subject
  print >> f, "Data: "
  j = 0
  for part in message.walk():
    j = j + 1
    fileName = part.get_filename()
    contentType = part.get_content_type()
    mycode=part.get_content_charset();
    # 保存附件
    if fileName:
      data = part.get_payload(decode=True)
      h = email.Header.Header(fileName)
      dh = email.Header.decode_header(h)
      fname = dh[0][0]
      encodeStr = dh[0][1]
      if encodeStr != None:
        fname = fname.decode(encodeStr, mycode)
      #end if
      fEx = open("%s"%(fname), 'wb')
      fEx.write(data)
      fEx.close()
    elif contentType == 'text/plain':# or contentType == 'text/html':
      #保存正文
      data = part.get_payload(decode=True)
      content=str(data);
      if mycode=='gb2312':
        content= mbs_to_utf8(content)
      #end if
      nPos = content.find('降息')
      print("nPos is %d"%(nPos))
      print >> f, data
    #end if
  #end for
  f.close()
#end for
pop_conn.quit()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
利用Python如何生成便签图片详解
Jul 09 Python
对pandas中Series的map函数详解
Jul 25 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
对python 自定义协议的方法详解
Feb 13 Python
新手入门Python编程的8个实用建议
Jul 12 Python
django表单的Widgets使用详解
Jul 22 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 Python
python实现TCP文件传输
Mar 20 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
Python图像处理之图像拼接
Apr 28 Python
Python如何让字典保持有序排列
Apr 29 Python
Python实现将Excel转换为json的方法示例
Aug 05 #Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 #Python
Python基于Socket实现的简单聊天程序示例
Aug 05 #Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 #Python
对pandas的dataframe绘图并保存的实现方法
Aug 05 #Python
解决PyCharm中光标变粗的问题
Aug 05 #Python
Python实现的中国剩余定理算法示例
Aug 05 #Python
You might like
用ODBC的分页显示
2006/10/09 PHP
js添加table的行和列 具体实现方法
2013/07/22 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
浅谈js中的bind
2019/03/18 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
django批量导入xml数据
2016/10/16 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
JPA面试常见问题
2016/11/14 面试题
某公司的.net工程师面试题笔试题
2013/11/22 面试题
一名女生的自荐信
2013/12/08 职场文书
单位提档介绍信
2014/01/17 职场文书
行政副总岗位职责
2014/02/23 职场文书
《春天来了》教学反思
2014/04/07 职场文书
小学教育见习报告
2014/10/31 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
电影开国大典观后感
2015/06/04 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android
详解JAVA的控制语句
2021/11/11 Java/Android