我正在使用自己的电子邮件客户端(由Django 1.10和Python 3提供支持)。
目前,我正在尝试使用python的IMAPClient库来渲染收件箱消息。看起来我成功解析了包含mixed
和alternative
子类型的电子邮件,但现在我不得不尝试使用子类型relative
呈现正文的部分内容。也就是说,包含带有嵌入式inline
附件的HTML的部分。
目前,我将使用相应的fetch
命令将所有内联图像逐个下载到我的服务器,然后在目标字母的HTML中插入这些图像上的链接。
为了说明,我们说电子邮件HTML表示包含内嵌图像:
...<td><img src="cid:part1.06030702.04060203@studinter.ru"></td>...
&#13;
...包含内嵌图像说明的bodystruture
部分如下所示:
(b'IMAGE', b'JPEG', (b'NAME', b'ban1.jpg'), b'<part1.06030702.04060203@studinter.ru>', None, b'BASE64', 15400, None, (b'INLINE', (b'FILENAME', b'ban1.jpg')), None)
因此,从理论上讲,我可以在服务器上下载图像,并将src
标记的值(即cid:part1.06030702.04060203@studinter.ru
)替换为我服务器上图像的网址。
我担心的是,将内联附件插入目标HTML邮件正文的过程是IMAPClient或python&#39; s email package这样的库已经实现的,以及我是否已经实现要重塑自行车。我完全迷失在这个话题中。
问题是,我真的必须自己实施吗?如果是,所描述的方法是否合适?如果不是,我真的很感激如何使用IMAPClient或标准库的imaplib进行此操作。
答案 0 :(得分:0)
我的外部库 https://github.com/ikvk/imap_tools
from imap_tools import MailBox, A
with MailBox('imap.mail.com').login('test@mail.com', 'pwd', 'INBOX') as mailbox:
for msg in mailbox.fetch(A(all=True)):
msg.html # str: '<b>Hello 你 Привет</b>'
for att in msg.attachments:
att.filename # str: 'cat.jpg'
att.payload # bytes: b'\xff\xd8\xff\xe0\'
att.content_id # str: 'part45.06020801.00060008@mail.ru'
att.content_type # str: 'image/jpeg'
att.content_disposition # str: 'inline'
这里有足够的数据进行渲染。
您可以分析 att.content_id 并在 html 中找到它。