2011-11-08 13 views
2

本当に奇妙なバグに遭遇しています。電子メールをmongodbに保存する

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

したがって、oauth2.clients.imapを使用してgmailからデータを取得しています。 gmailから電子メールを取得した後、私はmongodbで最初に "未加工"として保存することに決めました。

そして私のスクリプトの別の部分で、私はこのような何か:私はimport email as email_moduleを行なったし、私は、変数のためのより良い用語を考えることができないとして、変数のメールを陰に

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) 

注意をメールのインスタンスを保持

これは奇妙なことですが、私の電子メールのインスタンスはマルチパートです!

私はあることを私の検索コードを変更する場合:

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

mongoではどのようなデータが表示されますか?多分あなたがマルチパートのメールを受け取ったとき、それは普通のテキストではないかもしれませんが、それをmongoにプレーンテキストとして保存しています。 – werkshy

答えて

3

これを行うべきであるが判明:

OID = db.emails.insert({ '生の':bson.binary.Binary(データ)})

保存バイナリでは、オリジナルのコンテンツことを保証のデータは変更されません。

関連する問題