Повторная отправка электронной почты, используя IP-адрес нескольких хостов в Nodemailer - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь повторно отправить электронное письмо, если сначала отправка не удалась. Я хочу использовать 2 IP-адреса SMTP, он будет инициировать отправку электронной почты с использованием общего IP-адреса, если система не ответит, она будет использовать второй IP-адрес, если оба не удались, она повторит попытку через 10 минут.

Вот моя строка кода:

       var nodemailer = require('nodemailer');
       const log = require('../service/log_service')

       const emailServer = { 
         'aotgsupport@abc.com.my':'172.31.xx.xx',   
         'aotgsupport@abc.com.my':'172.31.178.xx'
       };

Вот где я хочу сменить хост, если первый не прошел

       exports.sendEmail = (req, recipient, template) => {
       _sendContent(req, recipient, template.subject, template.content);
       }

       async function _sendContent(req, recipient, subject, 
       emailContent,transportsArr,emailData,callback ) {

       var transporter
    for (const email in emailServer) {
        transporter =  nodemailer.createTransport({
        host:  email,
        port: 25,
        secure:  false,
        use_authentication: false,
        tls:  {
            // do not fail on invalid certs
            rejectUnauthorized: false
        },
        debug: true, // show debug output
        logger:  true // log information in console
    })
    }

      //if all emails fail track this event
      if (transportsArr.length == 0) {
          if (typeof callback == 'function') {
              callback(emailData);
          }           
          return;
      }
      
      //remove the first transporter from the array
      transporter = transportsArr.shift();
      
      //change from so it is same as sending transporter, to bypass SPAM 
      emailData.from = transporter.host;

    transporter.verify(function (error, _) {
        if (error) {
            setTimeout(function () { _sendContent(req, recipient, subject, emailContent); }, 600000) 
            log.updateEmailStatus(req.log, `can't connect to SMTP server: ${error}`)
        }
        else {
            log.updateEmailStatus(req.log, `connected to SMTP server`)
        }
    });

    const name = `${recipient.toLowerCase()}`;

    try {
        await transporter.sendMail({
            from: `aotgsupport@etiqa.com.my`,
            to: name,
            subject: `${subject}`,
            html: emailContent,
        });
        log.updateEmailStatus(req.log, `Successfully sent to: ${name}, subject: ${subject}`)
    } catch (error) {
        log.updateEmailStatus(req.log, `Failed to send email: ${error}`)
    }
    }

Но я получил эту ошибку журналы ошибок .

...