Read email body with node js imap

后端 未结 3 2081
死守一世寂寞
死守一世寂寞 2021-01-03 02:44

I\'m trying to read the body of an e-mail that is retrieved with node js. I\'m using this npm module: https://github.com/mscdex/node-imap

And I can get pretty much a

3条回答
  •  臣服心动
    2021-01-03 03:44

    You can use this code to fetch email body and mark it as seen

    var Imap = require("imap");
    var MailParser = require("mailparser").MailParser;
    var Promise = require("bluebird");
    Promise.longStackTraces();
    
    var imapConfig = {
        user: 'USERNAME',
        password: 'PASSWORD',
        host: 'HOST',
        port: 993,
        tls: true
    };
    
    var imap = new Imap(imapConfig);
    Promise.promisifyAll(imap);
    
    imap.once("ready", execute);
    imap.once("error", function(err) {
        log.error("Connection error: " + err.stack);
    });
    
    imap.connect();
    
    function execute() {
        imap.openBox("INBOX", false, function(err, mailBox) {
            if (err) {
                console.error(err);
                return;
            }
            imap.search(["UNSEEN"], function(err, results) {
                if(!results || !results.length){console.log("No unread mails");imap.end();return;}
                /* mark as seen
                imap.setFlags(results, ['\\Seen'], function(err) {
                    if (!err) {
                        console.log("marked as read");
                    } else {
                        console.log(JSON.stringify(err, null, 2));
                    }
                });*/
    
                var f = imap.fetch(results, { bodies: "" });
                f.on("message", processMessage);
                f.once("error", function(err) {
                    return Promise.reject(err);
                });
                f.once("end", function() {
                    console.log("Done fetching all unseen messages.");
                    imap.end();
                });
            });
        });
    }
    
    
    function processMessage(msg, seqno) {
        console.log("Processing msg #" + seqno);
        // console.log(msg);
    
        var parser = new MailParser();
        parser.on("headers", function(headers) {
            console.log("Header: " + JSON.stringify(headers));
        });
    
        parser.on('data', data => {
            if (data.type === 'text') {
                console.log(seqno);
                console.log(data.text);  /* data.html*/
            }
    
            // if (data.type === 'attachment') {
            //     console.log(data.filename);
            //     data.content.pipe(process.stdout);
            //     // data.content.on('end', () => data.release());
            // }
         });
    
        msg.on("body", function(stream) {
            stream.on("data", function(chunk) {
                parser.write(chunk.toString("utf8"));
            });
        });
        msg.once("end", function() {
            // console.log("Finished msg #" + seqno);
            parser.end();
        });
    }
    

    hope this code will help you :)

提交回复
热议问题