Python 电子邮件 - 保存 PDF 附件

问题描述

import imaplib
import email
from PyPDF2 import PdfFileMerger
import os

HOST = *****
USERNAME = ****
PASSWORD = *****

m = imaplib.IMAP4_SSL(HOST,993)
m.login(USERNAME,PASSWORD)
m.select('INBOX')

result,data = m.uid('search',None,"ALL")
if result == 'OK':
    for num in data[0].split():
        result,data = m.uid('fetch',num,'(RFC822)')
        if result == 'OK':
            email_message_raw = email.message_from_bytes(data[0][1])
            for part in email_message_raw.walk():

            content_type = part.get_content_type()
            
            files = []
            
            if "plain" in content_type:
                text = part.get_payload()
                f = open('text.html','w')
                f.write('<p>'+text+'</p>')
                f.close
                os.system('wkhtmltopdf text.html text.pdf')
                os.system('rm -r text.html')
                files.append('text.pdf')
            
            if "pdf" in content_type:
                '''
                save each pdf
                files.append(pdf_filename)
                '''
            merger = PdfFileMerger()
            for pdf in files:
                merger.append(pdf)
            merger.write(complete_email.pdf)
            merger.close

m.close()
m.logout()

我正在尝试保存电子邮件中的 PDF 附件,并将它们与创建的主电子邮件的 PDF 合并。纠结于如何下载 PDF,请参阅“””“””部分。谢谢。

解决方法

files = ['test.pdf'] #exising pdf from plain text
for part in data.walk():
    if part.get_content_type() == "application/pdf":
        files.append(part.get_filename(failobj=None))
        with open(part.get_filename(failobj=None),'wb') as f:
            f.write(part.get_payload(decode=True))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...