gpt4 book ai didi

python - 如何使用 python smtplib 保存附加在另一个电子邮件中的电子邮件?

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:19 25 4
gpt4 key购买 nike

我正在使用 python imaplib 下载附件并将其保存在电子邮件中。但是当有一封邮件作为另一封邮件的附件时,x.get_payload() 是 Nonetype。我认为这些类型的邮件是使用某些电子邮件客户端发送的。由于缺少文件名,我尝试在 header 中更改文件名,然后更改“Content-Disposition”。重命名的文件被打开,当我尝试使用

写入该文件时
fp.write(part.get_payload(decode=True))

它说需要字符串或缓冲区,但找不到 Nonetype。

>>>x.get_payload()
[<email.message.Message instance at 0x7f834eefa0e0>]
>>>type(part.get_payload())
<type 'list'>
>>>type(part.get_payload(decode=True))
<type 'NoneType'>

我删除了 decode=True 并得到了一个对象列表

x.get_payload()[0]
<email.message.Message instance at 0x7f834eefa0e0>

我尝试编辑文件名以防发现电子邮件作为附件。

if part.get('Content-Disposition'): 
attachment = str(part.get_filename()) #get filename
if attachment == 'None':
attachment = 'somename.mail'
attachment = self.autorename(attachment)#append (no: of occurences) to filename eg:filename(1) in case file exists
x.add_header('Content-Disposition', 'attachment', filename=attachment)
attachedmail = 1

if attachedmail == 1:
fp.write(str(x.get_payload()))
else:
fp.write(x.get_payload(decode=True)) #write contents to the opened file

文件包含对象名称文件内容如下所示

[ < email.message.Message instance at 0x7fe5e09aa248 > ]

如何将这些附加电子邮件的内容写入文件?

最佳答案

我自己解决了。 as [ < email.message.Message instance at 0x7fe5e09aa248 > ] 是 email.message.Message 实例的列表,每个实例都有 .as_string() 方法。在我的例子中,将 .as_string() 的内容写入文件帮助我提取了整个 header 数据,包括文件的嵌入式附件。然后我逐行检查文件并根据编码和文件类型保存内容。

>>>x.get_payload()
[<email.message.Message instance at 0x7f834eefa0e0>]
>>>fp=open('header','wb')
>>>fp.write(x.get_payload()[0].as_string())
>>>fp.close()
>>>file_as_list = []
>>>fp=open('header','rb')
>>>file_as_list = fp.readlines()
>>>fp.close()

然后检查文件中的每一行

for x in file_as_list:
if 'Content-Transfer-Encoding: quoted-printable' in x:
print 'qp encoded data found!'
if 'Content-Transfer-Encoding: base64' in x:
print 'base64 encoded data found!'

可以跳过表示内联(嵌入式)附件的编码数据,因为 imaplib 已经捕获了它。

关于python - 如何使用 python smtplib 保存附加在另一个电子邮件中的电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26986899/

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