python之poplib模块下载并解析邮件
2023-09-11 14:17:15 时间
# -*- 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='xxxx@163.com' 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:dengyg200891@163.com ---------------------------------------- To:drgs156@163.com ---------------------------------------- Subject:我就是标题 ---------------------------------------- 见到我,表示邮件发送成功 '''
相关文章
- python应用-猜数字
- 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求
- [Python模块学习]用qrcode模块生成二维码
- Python命令行参数解析模块getopt使用实例
- 在Python中使用glob模块查找文件路径的方法
- How can I install Easy_Install for Python 2.6.4 in Mac OSX 10.4.11【转】
- python中日志logging模块的性能及多进程详解
- python基础-实现名片功能
- python 虚拟环境篇
- python操作Excel模块openpyxl
- python常用标准库使用代码示例:sys模块、pprint模块、os模块
- 【代码】python paramiko模块代码示例:远程执行命令及上传和下载
- paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误
- Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
- Python编程语言学习:python编程语言中重要函数讲解之map函数等简介、使用方法之详细攻略
- Python语言学习:Python语言学习之python包/库package的简介(模块的封装/模块路径搜索/模块导入方法/自定义导入模块实现华氏-摄氏温度转换案例应用)、使用方法、管理工具之详细攻略
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Canvas)
- 〖Python零基础入门篇㊿〗- Python中的 sys 模块
- JS解密入门案例:python有道翻译JS解密
- python性能分析之cProfile模块
- 【华为OD机试Python实现】HJ55 挑7(中等)
- Python编程:python中的计时器timeit模块
- Python使用技巧(五):快速解决安装python-lxml模块库报错问题并简单使用
- python之psutil模块(获取系统性能信息(CPU,内存,磁盘,网络)
- 【异常】前端ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- 〖Python语法进阶篇③〗- 进程的创建与常用方法
- 【Python】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特旋转算法 | Python Random 模块