【问题标题】:get only those mail which are send through email reply with attachment in node js仅获取通过电子邮件回复发送的邮件,并在节点 js 中添加附件
【发布时间】:2021-01-18 11:53:32
【问题描述】:

嗨,我正在尝试只接收那些作为电子邮件回复由我的系统发送的电子邮件。更具体地说,我正在发送带有附件的电子邮件。接收者回复带有附件的电子邮件。

我想在我的系统中显示电子邮件的历史记录,以显示针对哪封电子邮件接收到的附件。例如,如果我已向 pearson B.Pearson B 发送电子邮件。Pearson B 将回复该电子邮件。我想要此的历史记录。

我能够发送和接收电子邮件。但问题是我在 a 和 b 之间获取了所有电子邮件(我只想要那些作为特定电子邮件的回复发送的电子邮件)。下面我给出了获取的代码电子邮件。

async function mailreply(req, res) {
    Employee.email_reply(req.params.email, function (err, employee) {
         
         var imapConfig = {
            user: '*****',
            password: '****',
            host: 'imap-mail.outlook.com',
            port: 993,
            tls: true,
            tlsOptions: {
                rejectUnauthorized: false
            }
        };

        var imap = new Imap(imapConfig);
        imap.once("ready", checkMail);
        imap.once("error", function (err) {
            console.log("Connection error: " + err.stack);
        });
        imap.connect();
        function checkMail() {
            imap.openBox("INBOX", false, function (err, mailBox) {
                if (err) {
                    console.error(err);
                    return;
                }
                imap.search(["UNSEEN", ["FROM", req.params.email]], function (err, results) {
                    if (!results || !results.length) {  
                        req.flash('error', 'No reply from selected user.')  
                        res.locals.message = req.flash();   
                        res.redirect(nodeSiteUrl+'/dashboard');  
                        imap.end(); return; }
                });
            });
        }
        
        
        
        
        var mailListener = new MailListener({
              username: "******",
              password: "******",
              host: "imap-mail.outlook.com",
              port: 993, // imap port
              tls: true,
              connTimeout: 10000, // Default by node-imap
              authTimeout: 5000, // Default by node-imap,
              tlsOptions: { rejectUnauthorized: false },
              mailbox: "INBOX", // mailbox to monitor
              searchFilter: [ 'UNSEEN', ['FROM', req.params.email] ], // the search filter being used after an IDLE notification has been retrieved , 
              markSeen: false, // all fetched email willbe marked as seen and not fetched next time
              fetchUnreadOnStart: true, // use it only if you want to get all unread email on lib start. Default is `false`,
              mailParserOptions: {streamAttachments: true}, // options to be passed to mailParser lib.
              attachments: true, // download attachments as they are encountered to the project directory
              attachmentOptions: { directory: "attachments/" } // specify a download directory for attachments
        });
            
        mailListener.start();
        
        mailListener.on("server:connected", function(){
          console.log("imapConnected");
        });
        
        mailListener.on("error", function(err){
          console.log('hello');
        });

        mailListener.on("mail", function(mail, seqno, attributes){
            console.log(seqno)
            let attachments = [];
            var attachment = mail.attachments;
            if(attachment) {
                for(var i = 0, len = attachment.length; i < len; ++i){
                    attachments.push(attachment[i].fileName);
                }
            }
            passDatatoPage(mail, attachments);
            mailListener.stop();
        }) 
       
        mailListener.on("attachment", function(attachment){
            let filepath = './public/attachment/receive/';
            let output = fs.createWriteStream(filepath + attachment.fileName);
            attachment.stream.pipe(output).on("end", function () {
                console.log("All the data in the file has been read");
            }).on("close", function (err) {
                console.log("Stream has been cloesd.");
            });  
        });
    
    
        function passDatatoPage(mail, attachments) {
            var sender = mail.to[0].address;
            var senderName = mail.from[0].name;
            var reciver = mail.from[0].address;
            const date = moment(mail.date).format('LL');
            var subject = mail.subject;
            var message = mail.text;
            //console.log(attachments);
            var result = attachments.map(function(val) {
                return val;
            }).join(',');
            var attachmentArr = result.split(',');
            console.log(attachmentArr)
            res.render('email-reply', { title: 'Email Reply', to: sender, senderName: senderName, from: reciver, date: date, subject: subject, msg: message, attachments: attachmentArr});
        }
        
    });
};
exports.mailreply = mailreply;

在此代码中,我收到此处显示的标题错误 code error

我可以知道我的代码有什么问题吗? 请在此代码中提供可能的解决方案或提供我如何完成任务的方式。 提前致谢。

【问题讨论】:

  • 请不要将代码或错误作为图片发布。使用复制和粘贴并以文本形式提供,以便未来用户可以通过搜索功能找到它。 Windows 控制台确实支持复制和粘贴。

标签: node.js email outlook imap email-attachments


【解决方案1】:

你需要做两件事

  1. 当您在数据库中发送电子邮件存储消息 ID 时

  2. 获取该消息 ID 并根据以下代码更改搜索过滤器
    (使用下面的搜索过滤器按 id 查找消息)

var mailListener = new MailListener({
              username: "HR2@almashriq.edu.sa",
              password: "Tab13510",
              host: "imap-mail.outlook.com",
              port: 993, // imap port
              tls: true,
              connTimeout: 10000, // Default by node-imap
              authTimeout: 5000, // Default by node-imap,
              tlsOptions: { rejectUnauthorized: false },
              mailbox: "INBOX", // mailbox to monitor
              searchFilter: [ ['HEADER','IN-REPLY-TO',messageId] ], // the search filter being used after an IDLE notification has been retrieved , 
              markSeen: false, // all fetched email willbe marked as seen and not fetched next time
              fetchUnreadOnStart: true, // use it only if you want to get all unread email on lib start. Default is `false`,
              mailParserOptions: {streamAttachments: true}, // options to be passed to mailParser lib.
              attachments: true, // download attachments as they are encountered to the project directory
              attachmentOptions: { directory: "attachments/" } // specify a download directory for attachments
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2014-03-22
    • 2021-07-10
    • 2015-09-30
    • 2015-07-23
    • 2015-12-07
    • 2019-01-22
    相关资源
    最近更新 更多