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下载邮件附件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python+POP3实现批量下载邮件附件

    最近新开学,接到了给老板的本科课程当助教的工作,百十来号人一学期下来得有四五次作业发进邮箱里,需要我来统计打分,想想挨个点进去下载附件的过程就头大,于是萌生了写个脚本来统计作业的想法. 其实python里收发邮件都有很方便的包,合理使用就好,可以解决绝大多数的邮件收发任务.但是这个脚本写下来还是花了不少时间,其中最大的一部分时间是花在了python的编码问题上,python2和python3的编码预设有些许的不一样,在python3中又取消了unicode这个方法,这就导致很多在python2中

  • 二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)

    可以使用Python的email模块来实现带有附件的邮件的发送. SMTP (Simple Mail Transfer Protocol)邮件传送代理 (Mail Transfer Agent,MTA) 程序使用SMTP协议来发送电邮到接收者的邮件服务器.SMTP协议只能用来发送邮件,不能用来接收邮件.大多数的邮件发送服务器 (Outgoing Mail Server) 都是使用SMTP协议.SMTP协议的默认TCP端口号是25. SMTP协议的一个重要特点是它能够接力传送邮件.它工作在两种情况

  • 使用Python发送邮件附件以定时备份MySQL的教程

    最近迁移了wordpress,系统升级为CentOS 6,很奇怪的一个问题,在原来CentOS 5.8下用的很正常的定时备份数据库并通过邮件发送的脚本不能发送附件,其他都正常,邮件内容也是uuencode生成的文件编码,但是就是不产生附件.而且找不出原因,望有知道的不吝赐教. 为了解决这一问题,我用Python写了一个mail客户端,可以发送附件,是一个命令行程序.废话不多说.贴代码: #!/usr/bin/env python #-*- coding: utf8 -*- ''' #======

  • 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服务

  • Python实现使用request模块下载图片demo示例

    本文实例讲述了Python实现使用request模块下载图片.分享给大家供大家参考,具体如下: 利用流传输下载图片 # -*- coding: utf-8 -*- import requests def download_image(): """ demo:下载图片 :return: """ headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) Ap

  • 在Python中使用poplib模块收取邮件的教程

    SMTP用于发送邮件,如果要收取邮件呢? 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上.收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3. Python内置一个poplib模块,实现了POP3协议,可以直接用来收邮件. 注意到POP3协议收取的不是一个已经可以阅读的邮件本身,而是邮件的原始文本,这和SMTP协议很像,SMTP发送的也是经过编码后的一大段文本. 要把POP3收取的文本变成可以阅读的邮件,还需要用email模块提供的各种类来解析原始文本

  • Python编程实现及时获取新邮件的方法示例

    本文实例讲述了Python编程实现及时获取新邮件的方法.分享给大家供大家参考,具体如下: #-*- encoding: utf-8 -*- import sys import locale import poplib from email import parser import email import string import mysql.connector import traceback import datetime from mysql.connector import error

  • 在Python中使用matplotlib模块绘制数据图的示例

    matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. 这篇我们用matplotlib从构造最简单的bar一步一步向复杂的bar前行.什么是最简单的bar,看如下语句你就知道她有多么简单了: import ma

  • Python实现读取邮箱中的邮件功能示例【含文本及附件】

    本文实例讲述了Python实现读取邮箱中的邮件功能.分享给大家供大家参考,具体如下: #-*- encoding: utf-8 -*- import sys import locale import poplib from email import parser import email import string # 确定运行环境的encoding __g_codeset = sys.getdefaultencoding() if "ascii"==__g_codeset: __g_

  • Python利用requests模块下载图片实例代码

    本文主要介绍的是关于Python利用requests模块下载图片的相关,下面话不多说了,来一起看看详细的介绍吧 MySQL中事先保存好爬取到的图片链接地址. 然后使用多线程把图片下载到本地. 示例代码: # coding: utf-8 import MySQLdb import requests import os import re from threading import Thread import datetime header = {'User-Agent': 'Mozilla/5.0

  • python中使用paramiko模块并实现远程连接服务器执行上传下载功能

    paramiko模块 paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,par

随机推荐