2015-08-14 2 views
3

Я использую как модули 0pm, так и inbox и mailparser npm для чтения и анализа писем из почтового ящика.nodejs mailparser разобрал одно и то же сообщение несколько раз

У меня возникли проблемы с разборчивыми повторяющимися сообщениями. в настоящее время происходит следующее:

Письма удаляются в правильный почтовый ящик, как и следовало ожидать от почтового сервера. Затем их подбирают inbox в моем приложении node.js. Затем они передаются по трубопроводу до mailparser и анализируются.

Это работает правильно. Проблема в том, что когда я отправляю второе письмо, я просто получаю первый. Иногда я получаю несколько, но я не понял, какие причины.

let _inbox  = require("inbox"  ); 
let _MailParser = require("mailparser").MailParser; 

let parser = new _MailParser(); 
let mail = _inbox.createConnection(false, "mail.myemailserver.com", { 
    auth: { 
    user: "[email protected]", 
    pass: "mypasswordthatissostrongnoonewilleverguessit:)" 
    } 
}); 

mail.on("new", (message) => { 
    console.log(message.UID, message.title); 
    db_insert(DB.collection("email_ids"), { _id: message.UID }).then(() => { 
    mail.createMessageStream(message.UID).pipe(parser); 
    }); 
}); 

parser.on("end", (message) => { 
    // This works the first time, I get the correct message. 
    // The second time this gets called I just get the first message again. 
}); 

Мои Spidey чувства говорят мне, что это что-то делать с тем фактом, я понятия не имею, как streams и pipe работы. Также стоит отметить, что это первый раз, когда я использовал одну из этих библиотек, и я, возможно, что-то пропустил.

mailparser
inbox

Я использую MongoDB и он бросает шаткое, если вы попытаетесь вставить ту же _id дважды, но это не жалуется на все. Это подтверждает мои подозрения относительно streams и pipe.

Я использую es6 с транспортером babel. не

Update

я больше не нужен ответ на этот вопрос. Я решил искать другую библиотеку. Теперь я использую mail-notifier.

На всякий случай кто-то заинтересован. Вот как я решил проблему.

let _notifier = require("mail-notifier"); 

let imap = { 
    user : "[email protected]", 
    password: "mypasswordthatissostrongnoonewilleverguessit:)", 
    host : "mail.mymailserver.com" 
}; 

_notifier(imap).on("mail", (mail) => { 
    // process email 
}).start(); 

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

ответ

5

У меня была та же проблема. Причина в том, что вам нужно создавать новый экземпляр MailParser каждый раз, когда вы запускаете цикл.

let _MailParser = require("mailparser").MailParser; 

mail.on("new", (message) => { 

    parser = new _MailParser(); 

    // do your stuff 

    parser.on("end", (message) => { 

    // finished 

    }); 
} 
Смежные вопросы