Python скрипт не будет загружать HTML письма с вложениями - PullRequest
0 голосов
/ 25 марта 2020

Я недавно опубликовал Используйте python для загрузки вложений электронной почты только на основе темы Ответы из этого поста позволили мне понять, что причина, по которой мой скрипт не работал для загрузки вложений, заключалась в том, что HTML в электронном письме, с которого я пытаюсь загрузить вложения. Тем не менее, я не уверен, как заставить этот скрипт работать. Он отлично работает при загрузке вложений из текстовых писем, но не будет работать, когда есть HTML. Есть ли у кого-нибудь какие-либо предложения здесь, какие-либо проблемы в моем коде? Пожалуйста, воздержитесь от публикации других ссылок на народные коды, я просмотрел многие из них и попытался реализовать их, у всех, похоже, есть похожая проблема, когда в письме есть HTML. Вот изображение электронного письма, из-за которого у моего кода возникают проблемы с загрузкой вложения. Email my code is trying to get

 import imaplib
 import email

server = 'imap.gmail.com'
user = '*****@lhac.com'
password = '*******'
outputdir = 'C:\install files'
subject = 'testtttt' #subject line of the emails you want to download attachments from

def connect(server, user, password):
    m = imaplib.IMAP4_SSL(server)
    m.login(user, password)
    m.select()
    return m

def downloaAttachmentsInEmail(m, emailid, outputdir):
    resp, data = m.fetch(emailid, "(BODY.PEEK[])")
    email_body = data[0][1]
    mail = email.message_from_bytes(email_body)
    if mail.get_content_maintype() != 'multipart':
        return
    for part in mail.walk():
        if part.get_content_maintype() != 'multipart' and part.get('Content-Disposition') is not None:
            open(outputdir + '/' + part.get_filename(), 'wb').write(part.get_payload(decode=True))

#download attachments from all emails with a specified subject line
def downloadAttachments(subject):
    m = connect(server, user, password)
    m.select("Inbox")
    typ, msgs = m.search(None, '(SUBJECT "' + subject + '")')
    msgs = msgs[0].split()
    for emailid in msgs:
        downloaAttachmentsInEmail(m, emailid, outputdir)

downloadAttachments(subject)

Вот ошибка, которую я получаю:

"C:/Users/gkidd/Documents/mailscript.py", line 24, in 
downloaAttachmentsInEmail open(outputdir + '/' + part.get_filename(), 'wb').write(part.get_payload(decode=True)) 
OSError: [Errno 22] Invalid argument: 'C:\\install files/testing_lhac.com__Advanced__lhac.com.csv
...