Хранение электронной почты в mongodb - PullRequest
2 голосов
/ 08 ноября 2011

Я столкнулся с действительно странной ошибкой.

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

Итак, я получаю кучу данных из gmail, используя oauth2.clients.imap.Получив письмо из gmail, я решил сохранить его как «raw» сначала в моем 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 Ответ

3 голосов
/ 09 ноября 2011

Оказывается, вы должны сделать это:

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

Сохранение в двоичном виде гарантирует, чтоисходное содержание данных не изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...