基本上我想从收件箱中读取所有新电子邮件并将它们放入数据库中。我使用python的原因是因为它有imaplib
,但我对它一无所知。
目前,我有这样的事情:
def primitive_get_text_blocks(email_message_instance):
maintype = email_message_instance.get_content_maintype()
if maintype == 'multipart':
return_parts = ""
for part in email_message_instance.get_payload():
if part.get_content_maintype() == 'text':
return_parts+= " "+ part.get_payload()
return return_parts
elif maintype == 'text':
return email_message_instance.get_payload()
return ""
fromField=con.escape(email_message["From"])
contentField=con.escape(primitive_get_text_blocks(email_message))
原始get_text_blocks
是从某个地方复制粘贴的。
结果是我获得了这样的数据库条目:
<META http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8">
据我所知,这与在utf-7
中编码有关。所以我改为get_payload(decode=True)
,但这给了我字节数组。如果我追加另一个decode('utf-8')
,它有时会因
'编解码器错误无法解码为...'。
我不知道编码是如何工作的,我只想要一个带有我的电子邮件正文的unicode字符串。
为什么没有简单的convert(charset from, charset to)
?如何获得可读的电子邮件正文(和地址?)。我发现IMAP Fetch Encoding并使用decode_header
我没有进一步。
-
我假设编码是字节表示字符的方式,所以考虑到这一点,不应该解码一个字节数组并吐出一个字符串?在堆栈溢出处,我遇到了一些人,因为它与使用utf-8
和utf-7
编码的beeing有关。这甚至意味着什么?
我做谷歌,似乎有很多重复,但他们得到的答案并没有真正帮助我(我已经尝试了大部分)
答案 0 :(得分:1)
事实证明这很容易。尽管所有文档都指向了令人眼花缭乱的过去,当unicode功能仍然是真实的时候,&#39; str&#39;做同样的事。
所以回顾一下,你必须通过&#39; decode = True&#39;与&#39; getPayload&#39;并将其包裹在str(...,&#39; utf-8&#39;)周围。