我遇到了一个非常奇怪的错误。
for emailid in item_ids:
resp, data = conn.fetch(emailid, "(RFC822)")
try:
db.emails.insert({'raw': data})
所以我使用oauth2.clients.imap从gmail中获取大量数据。从gmail获取电子邮件后,我决定先将它作为“原始”存储在我的mongodb中。
然后在我的剧本的另一部分,我做了这样的事情:
for i,j in enumerate(db.emails.find()):
raw_s = j['raw'][0][1]
email = email_module.message_from_string(raw_s)
if email.is_multipart():
print get_cleaned_body(email)
请注意,我做了import email as email_module
并隐藏了变量电子邮件,因为我无法想到一个更好的术语来保存电子邮件实例
现在奇怪的是,我的电子邮件实例都不是多部分!
如果我将检索代码修改为:
for emailid in item_ids:
resp, data = conn.fetch(emailid, "(RFC822)")
try:
#db.emails.insert({'raw': data})
e = email.message_from_string(data[0][1])
print e.is_multipart()
我看到了一些True
。
我想一个可能的解释可能是将数据保存到mongodb会弄乱一些不允许电子邮件正确解析的东西?
答案 0 :(得分:3)
原则上你应该这样做:
oid = db.emails.insert({'raw':bson.binary.Binary(data)})
以二进制方式保存可确保不会更改数据的原始内容。