python之poplib模块下载并解析邮件

# -*- coding: utf-8 -*-
#python 27
#xiaodeng
#python之poplib模块下载并解析邮件
#https://github.com/michaelliao/learn-python/blob/master/email/fetchmail_pop3.py
import poplib,email
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr

#编码处理
def guess_charset(msg):
    charset = msg.get_charset()#从msg对象获取编码
    if charset is None:
        content_type = msg.get(‘Content-Type‘, ‘‘).lower()#如果获取不到,再从content—type字段获取
        if ‘charset‘ in content_type:
            charset=content_type.split(‘charset=‘)[1].strip()
            return charset
    return charset

#数据解码
def decode_str(s):
    value, charset = decode_header(s)[0]#数据,数据编码方式,from email.header import decode_header
    if charset:
        value = value.decode(charset)
    return value

#print_ingo函数:
def print_info(msg, indent=0):#indent用于缩进显示
    if indent == 0:
        for header in [‘From‘, ‘To‘, ‘Subject‘]:#邮件的from、to、subject存在于根对象上
            value = msg.get(header, ‘‘)
            if value:
                if header==‘Subject‘:
                    value = decode_str(value)#需要解码subject字符串
                else:
                    #解码mail地址
                    hdr, addr = parseaddr(value)
                    name = decode_str(hdr)
                    value = ‘%s‘ % (addr)
            print ‘%s:%s‘%(header,value)
            print ‘--‘*20
    if (msg.is_multipart()):
        #如果邮件对象是一个is_multipart,get_payload()返回一个list,包含所有子对象
        parts = msg.get_payload()#循环获得列表项
        for n, part in enumerate(parts):
            #print(‘%spart %s‘ % (‘  ‘ * indent, n))
            #print(‘%s------------‘ % (‘  ‘ * indent))
            #递归打印没一个子对象
            print_info(part, indent + 1)
    else:
        #邮件对象不是一个is_multipart,就根据content_type判断
        content_type = msg.get_content_type()#数据类型
        if content_type==‘text/plain‘ or content_type==‘text/html‘:#纯文本 html文本
            #纯文本或html内容
            content = msg.get_payload(decode=True)#获得文本对象的字符串而非对象本身
            charset = guess_charset(msg)#要检测文本编码
            if charset:content = content.decode(charset)
            content=‘%s‘ % (content)
            print content#获取邮件文本内容,如果只有文本,打印显示的结果和邮件中看的效果一模一样
        else:
            print ‘不是文本‘

#链接到pop3服务器
server=poplib.POP3(‘pop.163.com‘)

#打印pop3服务器的欢迎对象
#server.getwelcome()

#身份认证
email=‘[email protected]‘
password=‘xxxx‘
server.user(email)#输入邮件地址
server.pass_(password)#输入口令
#print(‘Messages: %s. Size: %s‘ % server.stat())#Messages: 3. Size: 36090

#请求消息列表,返回所有邮件的编号;可以查看返回的列表类似[‘1 82923‘, ‘2 2184‘, ...]
resp, mails, octets = server.list()

#获取最新一封邮件
#Poplib模块的retr()函数使用来下载邮件的。它每次刚好下载一封邮件,我们必须传递给他想要下载的邮件的数字。
#print mails#[‘1 2721‘, ‘2 2784‘, ‘3 2986‘, ‘4 28987‘, ‘5 10056‘, ‘6 753‘, ‘7 763‘]
#注意索引号从1开始,那么最新的一封邮件就是索引最大的那个数值
lenString=len(mails)
resp, mailContent, octets = server.retr(lenString)#mailContent:邮件内容

#解析邮件:只需要一行代码就可以把邮件内容解析为Message对象
msg = Parser().parsestr(‘\r\n‘.join(mailContent))

#打印邮件内容,调用print_info函数:
print_info(msg)

#server.dele(len(mails))#慎重:将直接从服务器删除邮件:

#关闭连接:
server.quit()

‘‘‘
From:[email protected]
----------------------------------------
To:[email protected]
----------------------------------------
Subject:我就是标题
----------------------------------------
见到我,表示邮件发送成功
‘‘‘
时间: 2024-10-12 22:19:46

python之poplib模块下载并解析邮件的相关文章

python中使用poplib模块接收邮件

目的:用poplib模块接收邮件,并处理文本内容. 环境:windows 7 Python 3.5.3 情景:服务器一般预警都会有邮件通知,如果通知比较多且邮箱还会收到其他的邮件时,这时从中整理出预警信息并统计的话,这个也算是一个比较重复繁琐的事,可以用脚本自动收集信息,并整理相关信息到表格内,方便查看. 使用邮件模块接收邮件需要导入poplib,这个模块是内置的. import poplib # 服务器及用户信息 email = '邮箱地址' username = '登录用户名' passwo

Python 10min 面试题解析丨Python实现多连接下载器

作者:蜗牛 shengxinjing (woniuppp) · GitHub 今天群里看到有人问关于 Python 多线程写文件的问题,联想到这是 Reboot 的架构师班的入学题.我想了一下,感觉坑和考察的点还挺多的,可以当成一个面试题来问,简单说一下我的想法和思路吧,涉及的代码和注释在 GitHub 上 (https://github.com/shengxinjing/my_blog/blob/master/downloader/downloader.py) 当年的网络蚂蚁"多点同时下载.并

学习python argparse模块下载安装和使用

Python中argparse模块已经替代以前的optparse模块,常被用来实现命令行参数和选项的解析作用. 位置参数: 从一个最基本的程序开始(它并没有实现什么现实的功能): import argparseparser = argparse.ArgumentParser()parser.parse_args() 下面是运行之后的结果: $ python prog.py$ python prog.py --helpusage: prog.py [-h]optional arguments: 

python及其模块下载集合

1)python平台 https://www.python.org/downloads/ 2)打包工具 cx-freeze(python3以上版本打包工具) http://cx-freeze.sourceforge.net/ py2exe http://sourceforge.net/projects/py2exe/files/py2exe/ Pyinstaller http://www.pyinstaller.org/ ensymble(电脑端pythonS60打包工具) http://cod

python学习笔记(图表生成matplotlib模块下载安装)

最近博主在找工作换新环境.昨天电话面试中问到python中threading模块进行接口性能测试的时候.如何生成性能测试报告 我现在还停留在打印在屏幕中.所以今天想着是否可以生成相应的性能测试报告 首先想到的是python是否支持生成图表.有很多模块可以支持 博主这里就先试一试matplotlib模块 具体这个模块的来源.我就不细说明了.直接就是下载安装 这里给出pypi的下载地址: https://pypi.python.org/pypi/matplotlib/ 根据需要的版本下载对应的安装包

【Python】Python的urllib模块、urllib2模块进行网页下载文件

由于需要从某个网页上下载一些PDF文件,但是需要下载的PDF文件有几百个,所以不可能用人工点击来下载.正好Python有相关的模块,所以写了个程序来进行PDF文件的下载,顺便熟悉了Python的urllib模块和ulrllib2模块. 1.问题描述 需要从http://www.cvpapers.com/cvpr2014.html上下载几百个论文的PDF文件,该网页如下图所示: 2.问题解决 通过结合Python的urllib模块和urllib2模块来实现自动下载.代码如下: test.py #!

Python及其常用模块库下载及安装

一.Python下载:https://www.python.org/downloads/ 二.Python模块下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql(日常常用包都有)            Python模块(第三方库):  https://pypi.python.org/pypi 三.Python库安装(一):方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib 方法2: 多文件模块,带setup.py下载模块包

使用C语言为python编写动态模块(2)--解析python中的对象如何在C语言中传递并返回

楔子 编写扩展模块,需要有python源码层面的知识,我们之前介绍了python中的对象.但是对于编写扩展模块来讲还远远不够,因为里面还需要有python中模块的知识,比如:如何创建一个模块.如何初始化python环境等等.因此我们还需要了解一些前奏的知识,如果你的python基础比较好的话,那么我相信你一定能看懂,当然我们一开始只是介绍一个大概,至于细节方面我们会在真正编写扩展模块的时候会说. 关于使用C为python编写扩展模块,我前面还有一篇博客,强烈建议先去看那篇博客,对你了解Pytho

python实现网络爬虫下载天涯论坛帖子

最近发现天涯论坛是一个挺有意思的网站,有各种乱七八糟的帖子足以填补无聊时候的空虚感,但是相当不爽的一件事就是天涯的分页模式下想连贯的把楼主的内容看完实在是太心酸了,一个999页的帖子,百分之九十都是无聊网友的灌水,有时候连续翻几十页才能找到楼主的一条内容.所以无聊之下,就打算写一个简单的爬虫,能一次性把某一个帖子下楼主的所有内容一次性的下载下来.好吧,说了这么多废话,现在开始讲点正事. 网页的地址形式:http://bbs.tianya.cn/post-no05-355576-1.shtml,其