gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:27:40 26 4
gpt4 key购买 nike

我正在使用 python 3.7 和电子邮件,imap 库读取电子邮件并提取电子邮件和附件的内容,所有附件(如 excel、csv、pdf)都作为附件下载,但是当我在电子邮件中收到任何 .eml 文件时,它显示错误,请找到以下代码以读取电子邮件内容和附件,如果收到 eml 文件作为附件,则会显示错误。
它在写入 eml 文件时显示错误。
在写入时 part.get_payload(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()

错误是
<class 'TypeError'> ReadEmailUsingIMAP.py 129
a bytes-like object is required, not 'NoneType'

最佳答案

使用 eml_parser
https://pypi.org/project/eml-parser/
导入日期时间
导入json
导入 eml_parser

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))

关于python - 如何使用 Python 从电子邮件内容中获取附加的 eml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58991450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com