×

邮箱 附件 下载 email python

使用Python批量下载邮箱附件

鹭岛小千 鹭岛小千 发表于2021-06-16 22:11:04 浏览635 评论0

抢沙发发表评论

【问题描述】使用Python如何批量下载邮箱附件呢?

比如下载下图箭头所指三封邮件的附件:

15-1.png


【小千解答】使用imapclient库,示例代码如下:

import imapclient
import datetime as dt
from email.parser import BytesParser
from email.policy import default
# from email.header import Header,decode_header

with imapclient.IMAPClient('imap.163.com') as xqmail:
    xqmail.login('shaoqian9527@163.com','xqoffice.cn')
    xqmail.id_({'name':'IMAPClient','version':'2.2.0'})
    xqmail.select_folder('INBOX',True)
    mids = xqmail.search([u'SINCE',dt.date(2021,6,3)])
    for mid in mids:
        mail = xqmail.fetch(mid,['BODY[]'])
        raw_msg = mail[mid][b'BODY[]']
        msg = BytesParser(policy=default).parsebytes(raw_msg)
        x = 0
        attname = ''        
        for part in msg.walk():
            if not part.is_multipart():
                xqfile = part.get_filename()
                if xqfile:
                    x += 1
                    # h = Header(xqfile)
                    # dh = decode_header(h)[0]
                    # xqfile = dh[0]
                    # if dh[1]:
                    #     xqfile = dh[0].decode(dh[1])
                    # 下载附件
                    attdata = part.get_payload(decode=True)
                    with open('d:/xqoffice/' + xqfile,'wb') as f:
                        f.write(attdata)
                    attname += ('\n' + str(x) + '.' + xqfile)
        if x:
            rq = dt.datetime.strptime(msg['Date'],'%a, %d %b %Y %H:%M:%S +0800')
            strrq = dt.datetime.strftime(rq,'%Y-%m-%d')
            print('日期:' + strrq)
            print('主题:' + msg['Subject'])
            print('附件:',end='')
            print(attname,'\n')


运行结果:

15-2.png

15-3.png


打赏码.png


【参考资料】

  1. IMAPClient Class

  2. email --- 电子邮件与 MIME 处理包

  3. email.message: 表示一封电子邮件信息

  4. email: 示例

  5. Python 用IMAP接收邮件

  6. 使用python处理邮件正文及附件

  7. python imaplib 获取未读邮件,email解析并按照原名下载附件

  8. Python imaplib自动下载邮件附件并用pandas进行数据处理

  9. python 接收邮件(下载附件,解决中文乱码)

  10. python imap 接收邮件 --- imapclient 使用记录

  11. 使用python编程实现IMAP协议下载发件箱的邮件

  12. Python日期处理:日期转字符串 & 字符串转日期 & 两个日期相减


群贤毕至

访客