如何使用Python从电子邮件内容获取附加的eml文件?

2024-05-23 17:50:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.7和email,imap库来阅读电子邮件并提取电子邮件和附件的内容,所有附件(如excel、csv、pdf)都是作为附件下载的,但是当我在电子邮件中收到任何.eml文件时,它显示错误,请查找下面的代码来阅读电子邮件内容和附件,如果出现错误,请查找下面的代码eml文件作为附件接收。 它在编写eml文件时显示错误。 写在时间part.get_有效载荷(decode=True)在eml文件案例中为空。在

filename = part.get_filename()
if filename is not None:
    dot_position = filename.find('.')
    file_prefix = filename[0:dot_position]
    file_suffix = filename[dot_position:len(filename)]
    # print(dot_position)
    # print(file_prefix)
    # print(file_suffix)
    now = datetime.datetime.now()
    timestamp = str(now.strftime("%Y%m%d%H%M%S%f"))
    newFileName = file_prefix + "_" + timestamp + file_suffix
    sv_path = os.path.join(svdir, newFileName)
    # allfiles = allfiles.append([{"oldfilename": filename, "newfilename": newFileName}])
    mydict = filename + '$$' + newFileName
    mydict1 = mydict1 + ',' + mydict
    print(mydict1)
    if not os.path.isfile(sv_path):
        print("oldpath:---->" + sv_path)
        # filename = os.rename(filename, filename + '_Rahul')
        # sv_path = os.path.join(svdir, filename)
        # print("Newpath:---->" + sv_path)
        fp = open(sv_path, 'wb')
        # print("Rahul")
        print(part.get_payload(decode=True))
        # try:
        # newFileByteArray = bytearray(fp)
        # if part.get_payload(decode=True) is not None:
        fp.write(part.get_payload(decode=True))
        # except (TypeError, IOError):
        #    pass
        fp.close()

错误是

^{pr2}$

Tags: 文件pathtrue附件get电子邮件错误filename
1条回答
网友
1楼 · 发布于 2024-05-23 17:50:35

使用eml_解析器 https://pypi.org/project/eml-parser/ 导入日期时间 导入json 导入eml语法分析器

def json_serial(obj):
    if isinstance(obj, datetime.datetime):
        serial = obj.isoformat()
        return serial


with open('sample.eml', 'rb') as fhdl:
    raw_email = fhdl.read()

parsed_eml = eml_parser.eml_parser.decode_email_b(raw_email)

print(json.dumps(parsed_eml, default=json_serial))

相关问题 更多 >