python使用imap-tools模块下载邮件附件的示例
作者:歪理斜说 发布时间:2023-09-16 08:39:38
标签:python,imap-tools模块,邮件附件
最近在做一些email相关的办公自动化项目,发现一个第三方模块imap-tools不错, 网上没有啥相关介绍,所以记录下来.
环境: python3.8; imap-tools 0.39.0
需要pip 安装一下imap-tools模块
imap-tools模块是python的第三方扩展, 它使用标准库imaplib,并将常见的邮件处理事件封装,邮件处理起来代码短. 下面是个下载邮件附件的示例
from imap_tools import MailBox
with MailBox("imap服务器名").login("账号", "密码") as mailbox:
for msg in mailbox.fetch(limit=2,reverse=True): # 我这里为了避免读取全部的邮件,加上了limit=2的匹配参数,读取两封邮件,按照最新接收的次序排序,进行测试;
for att in msg.attachments: # msg为上一行取得的全部邮件
if att.filename: # 如果附件的文件名不为空
att_data = att.payload # 获得附件的内容
f = open(att.filename,'wb') # 用二进制打开,一般邮件附件都是二进制的.
f.write(att_data)
f.close()
就是这么短,用起来比imaplib爽多了.
补充:使用Python的imap和email模块读取邮件
SMTP发送邮件的博文很多,但完整读取邮件的较少,本文主要是Python3读取邮件的编码,同时使用BeautifulSoup解析邮件内容。
Python版本信息,如下:
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
代码
import email
import imaplib
from bs4 import BeautifulSoup
def main():
try:
# 填写需要读取邮件服务器的imap的host和port,不知道请联系管理员
conn = imaplib.IMAP4_SSL(host='imap.xxx.com', port='993')
# 读取邮件的用户名和密码
conn.login('xxx@qq.com', 'your password')
# 默认选择收件箱 INBOX
conn.select()
# Recent\Seen参数不起作用,暂先读取所有邮件
status, data = conn.search(None, 'ALL')
if status != 'OK':
raise Exception('读取邮件发生错误')
emailids = data[0].split()
# 倒序读取邮件
mail_counts = len(emailids)
for i in range(mail_counts-1, 0, -1):
# 获取邮件信息
status, edata = conn.fetch(emailids[i], '(RFC822)')
# Message对象
msg = email.message_from_bytes(edata[0][1])
# 标题
subject = email.header.decode_header(msg.get('subject'))
# subject包含文档编码
default_code = subject[0][1]
# print('Content_Type', msg.get_content_type())
ctype = msg.get_content_type()
# 是否multipart类型,分别处理
if msg.is_multipart():
pl = msg.get_payload()
for m in pl:
ctype = m.get_content_type()
if 'html' in ctype:
# 注意decode参数,如果是True将解码base64/quoted-printable等格式编码内容,否则不解码
html = str(m.get_payload(decode=True), m.get('content-type').split('=')[1])
# BeautifulSoup解析网页
soup = BeautifulSoup(html, "lxml")
divs = soup.select('body')
for d in divs:
# 提取所有文本内容
text = d.get_text(strip=True)
print(text)
else:
html = str(msg.get_payload(decode=True), default_code)
# BeautifulSoup解析网页
soup = BeautifulSoup(html, "lxml")
# 提取body标签里面的所有文本内容
divs = soup.select('body')
for d in divs:
text = d.get_text(strip=True)
print(text)
except Exception as ex:
print(ex)
finally:
# close
conn.close()
conn.logout()
if __name__ == "__main__":
main()
来源:https://www.cnblogs.com/worldinmyeyes/p/14587690.html


猜你喜欢
- 从控制器中获取URL的值有三种方式:1、使用Request.QueryString[]例如:string value = Request.Q
- Image控件又称图像控件,主要用来显示用户的图片或图像信息。一、属性表1 Image控件常用属性及说明属性说明ID控件IDImageAli
- 在Python中,类表示具有相同属性和方法的对象的集合。在使用类时,需要先定义类,然后再创建类的实例,通过类的实例就可以访问类中的属性和方法
- 1.需求说明记录一下项目对用户 UGC 文本进行字数限制的具体实现。不同的产品,出于种种原因,一般都会对用户输入的文本内容做字数限制。出于产
- 内容适应形式学习了死猫的文章,我今天也来说说有关内容和容器的关系。看标题你也许觉得有些囧,它和上一篇《形式追随内容?》看起来相反,而且好像从
- 动画效果如下:GIF看起来可能会有点卡wxml<view class="confirm bubble">确定
- 1、首先在系统盘中查找scrrun.dll,如果存在这个文件,请跳到第三步,如果没有,请执行第二步。 2、在安装文件目录i386中找到scr
- 本文实例为大家分享了python修改装饰器中参数的具体代码,供大家参考,具体内容如下案例: &
- <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
- 表单的验证一直是网页设计者头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把
- 1、python中__name__是什么意思?很多python的初学者可能都会遇到一个问题:__name__是什么意思?在刚开始学习pyth
- 背景介绍Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。因为这
- 一、%号占位符这是一种引入最早的一种,也是比较容易理解的一种方式.使用方式为:1、格式化字符串中变化的部分使用占位符2、变量以元组形式提供3
- 最近公司有一个日文项目,由于之前使用的是自己开发的中文CMS,并没有将语言包分离,在网站建设调试过程中出现了令人头疼的乱码问题。乱码出现的原
- python程序结构python“一切皆对象”,这是接触python听到最多的总结了。在python中最基层的单位应该就是对象了,对象需要靠
- Pygal可用来生成可缩放的矢量图形文件,对于需要在尺寸不同的屏幕上显示的图表,这很有用,可以自动缩放,自适应观看者的屏幕1、Pygal模块
- TensorFlow中tf.batch_matmul()用法如果有两个三阶张量,size分别为a.shape = [100, 3, 4]b.
- merge()import pandas as pdpd.merge(DateFrame1,DateFrame2,on = '
- 以下以CentOS 7.2为例,安装php的运行环境,首先打开php官网http://php.net/点击导航栏的Downloads进入下载
- 这两天项目里出了一个问题,LIMIT使用后报错。 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料申请