收取邮件有两种协议,POP3和IMAP,POP3相对于IMAP功能较少无法对邮件进行更深层次的操作,因此本文使用IMAP协议收取邮件。python提供了很多收邮件的模块,本文使用imaplib来接收邮件。

前提

需要在邮件箱的设置中打开允许IMAP,不同邮件开启全方式不同,具体开启方式自行百度。(本文使用outlook,默认开启)

难点

获得邮件不难,难点是如何解析邮件的内容,由于邮件内容的编码是不固定的,因此编码格式的选择影响着解析邮件内容的正确性

代码

import imaplib , email , os

imapserver = 'outlook.office365.com'

emailuser = "bill@outlook.com"

emailpasswd = "billpasswd"

attachementdir=r"d:\a" #附件存放的位置

conn = imaplib.IMAP4_SSL(imapserver)

conn.login(emailuser,emailpasswd)

conn.list() #列出邮箱中所有的列表,如:收件箱、垃圾箱、草稿箱。。。

conn.select('INBOX') #选择收件箱(默认)

result , dataid = conn.uid ( 'search' , None , "ALL" )

mailidlist = dataid[0].split () #转成标准列表,获得所有邮件的ID

# 解析邮件内容

def get_body(msg):

if msg.is_multipart ():

return get_body ( msg.get_payload ( 0 ) )

else:

return msg.get_payload ( None , decode=True )

#search('FROM','abc@outlook.com',conn) 根据输入的条件查找特定的邮件

def search(key,value,conn):

result , data = conn.search(None,key,'"()"'.format(value))

return data

#获取附件

def get_attachements(msg):

for part in msg.walk():

if part.get_content_maintype() == 'multipart':

continue

if part.get('Content-Disposition') is None:

continue

filename = part.get_filename()

if bool(filename):

filepath = os.path.join(attachementdir,filename)

with open(filepath,'wb') as f:

f.write(part.get_payload(decode=True))

for id in mailidlist:

result , data = conn.fetch ( id , '(RFC822)' ) # 通过邮件id获取邮件

e = email.message_from_bytes ( data[0][1] )

subject = email.header.make_header ( email.header.decode_header ( e['SUBJECT'] ) )

mail_from = email.header.make_header ( email.header.decode_header ( e['From'] ) )

print("邮件的subject是%s" % subject)

print("邮件的发件人是%s" % mail_from)

body = str ( get_body ( e ) , encoding='utf-8' ) # utf-8 gb2312 GB18030解析中文日文英文

print("邮件内容是%s" % body)

conn.logout()

【问题】

一般utf-8可以解决大部分的邮件编码格式,若不能解析请使用其他编码。

【待改进】

email模块有一个获取邮件编码的方法,暂时未能找到

使用email提供的方法获取邮件编码,变可以解决所有邮件解析的问题

python爬取邮件内容_python 接收邮件获取邮件内容相关推荐

  1. python爬取大众点评_Python爬虫,获取大众点评上海地区的餐饮信息!

    需求:获取大众点评官网上上海地区的全部餐饮信息(店名,商圈,星级,评论数,人均数,口味评分,环境评分,服务评分,地址,电话等信息) 分析:餐饮种类分为18种,每一种下面又有子分类! 接着我们拿一个种类 ...

  2. python爬取下拉列表数据_Python+selenium之获取文本值和下拉框选择数据

    Python+selenium之获取文本值和下拉框选择数据 一.结合实例进行描述 1. 实例如下所示: #新增标签操作 def func_labels(self): self.driver.find_ ...

  3. python爬取小说基本信息_Python爬虫零基础实例---爬取小说吧小说内容到本地

    Python爬虫实例--爬取百度贴吧小说 写在前面本篇文章是我在简书上写的第一篇技术文章,作为一个理科生,能把仅剩的一点文笔拿出来献丑已是不易,希望大家能在指教我的同时给予我一点点鼓励,谢谢. 一.介 ...

  4. python爬取mysql数据_Python爬取数据并写入MySQL数据库的实例

    Python爬取数据并写入MySQL数据库的实例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python爬取数据并写入MySQL数据库的实例.txt ] (友 ...

  5. python爬取歌曲评论_python 爬取歌曲评论的简单示例

    这篇文章主要为大家详细介绍了python 爬取歌曲评论的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣python 爬取歌曲评论的简单示例的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. ...

  6. python爬取文件归类_python爬取各类文档方法归类汇总

    HTML文档是互联网上的主要文档类型,但还存在如TXT.WORD.excel.PDF.csv等多种类型的文档.网络爬虫不仅需要能够抓取HTML中的敏感信息,也需要有抓取其他类型文档的能力.下面简要记录 ...

  7. python爬取json数据_Python爬取数据保存为Json格式的代码示例

    python爬取数据保存为Json格式 代码如下: #encoding:'utf-8' import urllib.request from bs4 import BeautifulSoup impo ...

  8. python 爬取上海体育彩票文章标题、时间、内容

    python期末大作业 爬取上海体育彩票文章标题.时间.内容 并计算词频.生成特殊形状的词云图 利用selenium爬取内容代码: # https://www.shsportslottery.com/ ...

  9. python爬取豆瓣书籍_Python利用lxml模块爬取豆瓣读书排行榜的方法与分析

    前言 上次使用了BeautifulSoup库爬取电影排行榜,爬取相对来说有点麻烦,爬取的速度也较慢.本次使用的lxml库,我个人是最喜欢的,爬取的语法很简单,爬取速度也快. 本次爬取的豆瓣书籍排行榜的 ...

  10. python爬取招聘信息_python 爬取boss直聘招聘信息实现

    原标题:python 爬取boss直聘招聘信息实现 1.一些公共方法的准备 获取数据库链接: importpymysql ''' 遇到不懂的问题?Python学习交流群:821460695满足你的需求 ...

最新文章

  1. ldconfig及 LD_LIBRARY_PATH
  2. UA MATH567 高维统计 专题0 为什么需要高维统计理论?——以线性判别分析为例
  3. MVC系统学习6—Filter
  4. java实现的代理的两种办法
  5. 数据结构:哈希表(散列表)基础
  6. easyswoole数据库连接池_如何在 Swoole 中优雅的实现 MySQL 连接池
  7. 大一计算机论文_大一计算机论文发表.doc
  8. Python实例讲解 -- 解析xml
  9. 鸿蒙系统年底问世视频,鸿蒙系统年底问世 什么时候上市使用
  10. 飞鸽传书:浅谈 Scrum
  11. 移动安全-iOS(三)
  12. PL/SQL Developer主界面窗口左边窗口默认设置
  13. python中tell函数_PYTHON学习14.09:Python seek()和tell()函数详解
  14. Gogs 阿里云二级域名解析+Nginx 反向代理
  15. JavaScript学习之初识JS
  16. [转载]希捷固件门7200.12 CC46固件升级方法
  17. 联想交换机服务器型号,ThinkSystem DB610s光纤交换机
  18. 猴王问题(项目分析以及项目实现)
  19. 暑假假期训练总结-26
  20. 计算机基本单位——位、字节、字、字长

热门文章

  1. js拼接URL字符串
  2. 机械优化设计matlab程序,机械优化设计课后MATLAB编程全手工
  3. 错误:1 http://packages.ros.org/ros/ubuntu xenial InRelease 下列签名无效: KEYEXPIRED 1622248854
  4. java 加密解密 工具包_java加密解密工具类
  5. SCU 4438 Censor (KMP)
  6. BurpSuite—-Scanner模块(漏洞扫描)
  7. ZYNQ-基于BRAM的PS和PL数据交互
  8. 轻松插入WordPress页眉页脚代码插件Insert Headers and Footers
  9. 2022年初级经济师考试金融专业知识与实务练习题及答案
  10. Mybatis-Plugs手册