2011-11-08 25 views
2

我遇到了一个非常奇怪的错误。将电子邮件存入mongodb

for emailid in item_ids: 
    resp, data = conn.fetch(emailid, "(RFC822)") 
    try: 
     db.emails.insert({'raw': data}) 

所以我从gmail使用oauth2.clients.imap获取一堆数据。从gmail获取电子邮件后,我决定首先在我的MongoDB中将其存储为“raw”。

然后在我的脚本的另一部分,我做这样的事情:

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 messes一些不允许电子邮件被正确解析?

+0

mongo中的数据是什么样的?据推测,当你收到一个多部分电子邮件,它不是纯文本,但你要保存为纯文本mongo。 – werkshy

回答

3

原来你应该这样做:

OID = db.emails.insert({ '原始':bson.binary.Binary(数据)})

保存在二进制确保原始内容的数据没有改变。