python使用imap-tools模块下载邮件附件的示例

 更新时间:2021年12月10日 11:10:00   作者:歪理斜说  
imap-tools模块是python的第三方扩展, 它使用标准库imaplib,并将常见的邮件处理事件封装,邮件处理起来代码短,下面给大家介绍下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()

到此这篇关于python使用imap-tools模块下载邮件中的附件的文章就介绍到这了,更多相关python下载邮件附件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pandas导入导出excel、csv、txt文件教程

    Pandas导入导出excel、csv、txt文件教程

    Pandas 是一个强大的数据分析和处理库,可以用来读取和处理多种数据格式,本文主要介绍了Pandas导入导出excel、csv、txt文件教程,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 使用Python将图片转正方形的两种方法实例代码详解

    使用Python将图片转正方形的两种方法实例代码详解

    这篇文章主要介绍了使用Python将图片转正方形的两种方法,本文通过实例代码给大家给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 用python的seaborn画数值箱型图

    用python的seaborn画数值箱型图

    大家好,本篇文章主要讲的是用python的seaborn画数值箱型图,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • python 中的int()函数怎么用

    python 中的int()函数怎么用

    int() 函数用于将一个字符串会数字转换为整型。接下来通过本文给大家介绍python 中的int()函数的相关知识,感兴趣的朋友一起看看吧
    2017-10-10
  • Python编程进阶代码逻辑分离指南

    Python编程进阶代码逻辑分离指南

    在 Python 编程中,适当的代码逻辑分离可以帮助降低复杂度、提高可读性,减少大量的 if-else 结构,本文将深入探讨如何使用不同方法来改进代码结构,降低对 if-else 结构的依赖
    2023-12-12
  • python基于机器学习预测股票交易信号

    python基于机器学习预测股票交易信号

    近年来,随着技术的发展,机器学习和深度学习在金融资产量化研究上的应用越来越广泛和深入。目前,大量数据科学家在Kaggle网站上发布了使用机器学习/深度学习模型对股票、期货、比特币等金融资产做预测和分析的文章。本文就来看看如何用python预测股票交易信号
    2021-05-05
  • Python用HBuilder创建交流社区APP

    Python用HBuilder创建交流社区APP

    这篇文章主要讲解Python使用HBuilder创建交流社区APP,使用HBuilder做一个简单的社区浏览界面,下面文章附有详细的代码,需要的朋友可以参考一下
    2021-11-11
  • Python 异常处理的实例详解

    Python 异常处理的实例详解

    这篇文章主要介绍了Python 异常处理的实例详解的相关资料,希望通过本文能帮助到大家掌握Python 异常的知识,需要的朋友可以参考下
    2017-09-09
  • Python matplotlib中更换画布背景颜色的3种方法

    Python matplotlib中更换画布背景颜色的3种方法

    这篇文章主要给大家介绍了关于Python matplotlib中更换画布背景颜色的3种方法,在Matplotlib中,我们可以使用set_facecolor()方法来设置背景颜色,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Python用Pillow(PIL)进行简单的图像操作方法

    Python用Pillow(PIL)进行简单的图像操作方法

    下面小编就为大家带来一篇Python用Pillow(PIL)进行简单的图像操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07

最新评论