没有使用imap nodejs获取适当的电子邮件正文内容,仅用于少量邮件

时间:2014-12-03 14:03:06

标签: javascript node.js email imap

您好,

我正在使用Imap nodejs模块来获取电子邮件的内容,但有时候对于某些邮件,我收到了错误的正文内容。例如对于一封邮件,我的身体内容如下

SGkgTmFkZWVtDQoNCiANCg0KT3VyIENFTyBpcyBjdXJyZW50bHkgdHJhdmVsbGluZyBhbmQgd291 bGQgbm90IGJlIGF2YWlsYWJsZSB0aGlzIHdlZWsuIFdlIGFyZSBwZW5kaW5nIGFwcHJvdmFsIG9m IHRoZSBjb250cmFjdCwgd291bGQgdXBkYXRlIEFTQVAuDQoNCiANCg0KLS0NCg0KVGhhbmtzICYg UmVnYXJkcywNCg0KIA0KDQpNYXlhbmsgSi4gR3VsYXRpDQoNCk1hbmFnZXIgfCBQcm9kdWN0cyB8 IEVudGVycHJpc2UgQnVzaW5lc3MgfCBBQ0wgTW9iaWxlIExpbWl0ZWQNCg0KTW9iaWxlLyBCb2Fy ZCBOdW1iZXI6ICs5MS4gODgwMC05OTg5LTIwDQoNCiANCg0KRnJvbTogTWF5YW5rIEp5b3RpIEd1 bGF0aSANClNlbnQ6IFRodXJzZGF5LCBOb3ZlbWJlciAyMCwgMjAxNCAxMjo1OSBQTQ0KVG86ICdO YWRlZW0gSXFiYWwnDQpDYzogJ1Nob2JoaXQgRWxoYW5jZSc7IFJpc2hpIFRhbmRvbg0KU3ViamVj dDogUkU6IEFwcGxhbmUgLSBGb2xsb3cgVXANCg0KIA0KDQpIaQ0KDQogDQoNCkFzIGRpc2N1c3Nl ZCwgdGhlIGNvbnRyYWN0IGlzIHVuZGVyIENFT+KAmXMgYXBwcm92YWwuIFdvdWxkIHVwZGF0ZSBB U0FQLg0KDQogDQoNCi0tDQoNClRoYW5rcyAmIFJlZ2FyZHMsDQoNCiANCg0KTWF5YW5rIEouIEd1 bGF0aQ0KDQpNYW5hZ2VyIHwgUHJvZHVjdHMgfCBFbnRlcnByaXNlIEJ1c2luZXNzIHwgQUNMIE1v YmlsZSBMaW1pdGVkDQoNCk1vYmlsZS8gQm9hcmQgTnVtYmVyOiArOTEuIDg4MDAtOTk4OS0yMA0K DQogDQoNCkZyb206IE5hZGVlbSBJcWJhbCBbbWFpbHRvOm5hZGVlbS5pcWJhbEBhcHBsYW5lLmNv bV0gDQpTZW50OiBXZWRuZXNkYXksIE5vdmVtYmVyIDE5LCAyMDE0IDU6MTYgUE0NClRvOiBSaXNo aSBUYW5kb247IE1heWFuayBKeW90aSBHdWxhdGkNCkNjOiAnU2hvYmhpdCBFbGhhbmNlJw0KU3Vi 

现在我已将此电子邮件发送给我,然后我使用我的emailid读取了正文内容,然后我有正确的正文内容,如:

  

更多细节= C2 = BB为Applane预订   团队何时 2014年12月2日星期二下午1点= E2 = 80 = 93 3点印度标准时间   视频通话 https://plus.google.com/hangouts/_/daffodilsw.com/nadeem 日历 Nadeem Iqbal   = E2 = 80 = A2 Mandeep Singh - 创造者= E2 = 80 = A2 Nadeem Iqbal Going?

我获取电子邮件内容的代码如下:

       imap.once('ready', function () {
            imap.openBox("[Gmail]/All Mail", true, function (err, box) {
                if (err) {
                    d.reject(err);
                }
                var Moment = require("moment");
                var sDate = Moment(startDate).format("MMMM DD, YYYY");
                var mailSearchOptions = [];
                if (params.mailSearchOptions) {
                    mailSearchOptions = params.mailSearchOptions
                } else {
                    mailSearchOptions.push(['SINCE', sDate]);
                    if (uid) {
                        mailSearchOptions.push(["uid", uid + ":*"])
                    }
                }
                try {
                    imap.search(mailSearchOptions, function (err, results) {
                        if (err) {
                            d.reject(err);
                            return
                        }
                        if (!results || (Array.isArray(results) && results.length == 0)) {
                            d.reject(err);
                            return;
                        }
                        var f = imap.fetch(results, { bodies: ['HEADER.FIELDS (TO FROM SUBJECT CC)', '1', '1.1'], struct: true });

                        f.on('message', function (msg, seqno) {
                            console.log('Message #%d', seqno);
                            var mailDate = false;
                            var head = "";
                            var text = "";
                            var attechmentText = "";
                            msg.on("body", function (stream, info) {
                                stream.on('data', function (chunk) {
                                    if (info.which == 'HEADER.FIELDS (TO FROM SUBJECT CC)') {
                                        head += chunk.toString('utf8');
                                    }
                                    else if (info.which == "1") {
                                        text += chunk.toString('utf8');
                                    } else {
                                        attechmentText += chunk.toString('utf8');
                                    }
                                });
                                stream.once('end', function () {
                                    if (info.which == 'HEADER.FIELDS (TO FROM SUBJECT CC)') {
                                        head = require("imap").parseHeader(head);
                                    }
                                });
                            });
                            msg.once('attributes', function (attrs) {
                                lastUid = attrs.uid;
                                mailDate = attrs.date;
                            });
                            msg.once('end', function () {
                                if (!uid || (uid && lastUid !== parseInt(uid))) {
                                    var mailbody = "";
                                    if (attechmentText != "null") {
                                        mailbody = attechmentText;
                                    } else {
                                        mailbody = text;
                                    }
                                    formatEmails(head);
                                    head.subject = head.subject ? head.subject[0] : "";
                                    var participants = [];
                                    populateParticipants(head, username, participants);
                                    mails.push({head: head, body: mailbody, date: mailDate, participants: participants, user: {_id: userid, username: username}, uid: lastUid});
                                }

                            });
                        });
                        f.once('error', function (err) {
                            d.reject(err);
                        });
                        f.once('end', function () {
                            console.log('Done fetching all messages!!!!');
                            if (!params.maintainLogs) {
                                return  updateLastUid(lastUid, uid, userid, db).then(function () {
                                    imap.end();
                                });
                            } else {
                                imap.end();
                            }

                        });
                    });
                } catch (e) {
                    d.reject(e);
                }
            });
        });

        imap.once('error', function (err) {
            console.log("Error>>>>" + err);
            d.reject(err);
        });

        imap.once('end', function () {
            console.log('Connection ended');
            d.resolve(mails);
        });

        imap.connect();

有人可以告诉我我做错了什么吗?

感谢您的帮助

0 个答案:

没有答案