【发布时间】:2021-05-28 20:13:54
【问题描述】:
我正在使用 IMapLib 库从我的邮件服务器读取电子邮件。电子邮件包含我的程序应解释的 JSON 编码消息。
邮件代码:
tmp, data = imap.search(None, "UNSEEN")
emails = []
for num in data[0].split():
tmp, data = imap.fetch(num, "(BODY[TEXT])")
# Only append the email body
emails.append(str(data[0][1]))
我从 imaplib 获得的字符串包含一些特殊字符。我发现 =xx 看起来像“特殊”字符的 ASCII 编码版本。如何将包含此类字符的字符串转换为“常规”Python 字符串,或者我是否可能在 imaplib 代码中遗漏了错误编码字符串的选项?
我得到的示例字符串:
b'这是 Mime 格式的消息。如果你看到这个,你的邮件阅读器不支持这种格式。\r\n\r\n--=_8e336d0902b13eaec4e7906847c21a6d\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding:quoted-printable\r\n\r\n=0A=0A=0A=0A =0A =0A =0A =0A =0A =0A JSON{"arrival" :"03.03.21","departure":"07.03.21","email":"test=\r\n=2Etest@gmail.com","apartment":"app","ov=\r\ nerride":0}JSON =0A =0A=0A\r\n--=_8e336d0902b13eaec4e7906847c21a6d\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Transfer-Encoding:quoted-printable\r\n\r\n=0A=0A=0A=0A =0A =0A =0A =0A =0A
=0A JSON{"arrival":"03.03.21","departure":"07.03.21","email":"test=\r\n=2Etest@gmail.com","apartment": "app","ov=\r\nerride":0}JSON
=0A =0A=0A\r\n--=_8e336d0902b13eaec4e7906847c21a6d--\r\n'
我最初只是删除所有 '\n'、'\r' 和 '=' 但今天我收到了这个电子邮件/字符串,我的代码错误地将“test=\r\n=2Etest@gmail.com”解释为“test2Etest@gmail.com”而不是“test.test@gmail.com”
【问题讨论】:
-
正如@Rivers 所说,您可以尝试使用 imap_tools lib。实际上,您不需要 quopri.decodestring 来解析电子邮件 - 请参阅 imap_tools message.py src。问候,imap_tools 作者。