【问题标题】:script to download email attachments下载电子邮件附件的脚本
【发布时间】:2017-05-10 23:15:28
【问题描述】:

我在第 18 行遇到错误 (m = email.message_from_string(email_body)) 说 TypeError: initial_value must be str or None, not bytes。当我尝试通过说print (data[0][1]) 来运行它时,它会给我一个编码格式的电子邮件输出。

我想调试错误。

import imaplib
import email
import os

svdir = 'C:\\Users\\rnandipati\\Downloads'

mail = imaplib.IMAP4_SSL('outlook.office365.com',993)
mail.login("rnaati@jess.com", "R!")
mail.select("Inbox")

typ, msgs = mail.search(None, '(SUBJECT "ADP Files")')
msgs = msgs[0].split()

for emailid in msgs:
    resp, data = mail.fetch(emailid, "(RFC822)")

    email_body = data[0][1]
    m = email.message_from_string(email_body)

    if m.get_content_maintype() != 'multipart':
        continue

    for part in m.walk():
        if part.get_content_maintype() == 'multipart':
            continue
        if part.get('Content-Disposition') is None:
            continue

        filename = part.get_filename()
        if filename is not None:
            sv_path = os.path.join(svdir, filename)
            if not os.path.isfile(sv_path):
                print(sv_path)
                fp = open(sv_path, 'wb')
                fp.write(part.get_payload(decode=True))
                fp.close()

【问题讨论】:

    标签: python outlook


    【解决方案1】:

    email 模块包含一个函数message_from_bytes。使用它而不是 message_from_string 来解析 bytes 对象。

    m = email.message_from_bytes(email_body)
    

    【讨论】:

    • 它不再显示错误,但也没有提供所需的输出
    • 我正在尝试从包含代码所示主题的电子邮件中下载附件。当我输入message_from_bytes 时,它只是执行并且什么都不显示。
    • 好吧,我回答了您提出的问题并帮助您调试(并修复)此错误。如果您在编写程序时再次遇到困难,请提出一个新问题。如果它不是太模糊或太宽泛,有人会帮助你。
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2014-05-25
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多