将电子邮件存储到mongodb

时间:2011-11-08 08:37:58

标签: python mongodb

我遇到了一个非常奇怪的错误。

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会弄乱一些不允许电子邮件正确解析的东西?

1 个答案:

答案 0 :(得分:3)

原则上你应该这样做:

oid = db.emails.insert({'raw':bson.binary.Binary(data)})

以二进制方式保存可确保不会更改数据的原始内容。