javascript
  • node.js
  • email
  • asynchronous
  • nodemailer
  • 2017-05-18 15 views 0 likes 
    0

    비동기 적으로 사용하는 사용자에게 여러 개의 메일을 보내려고합니다.노드 js의 루프에서 대량 메일을 비동기 적으로 보내려면 어떻게해야합니까?

    • 의 user.js =이 ("./ emailUtil.js")를 필요로 emailUtil

      VAR 파일; var userdata [100];

      내버려, 복수의 데이터가있는 유저 데이터의 가정 // (I = 0하자위한

      100; 나는 emailSubject = 'SGT 일정'emailBody = '메일의 본문을'하자 ; emailUtil .sendEmail (emailBody, '', emailSubject, '', '', user_data.email, '당신의 이름', ''); } I 기능

      를 보내 내 이메일을 작성하는 다른 파일에

      ,210
    • emailUtil.js

      // 이메일 백분율 파일

      var nodemailer = require('nodemailer'); 
      
      // Not the movie transporter! 
          var transporter = nodemailer.createTransport({ 
           service: 'gmail', 
           auth: { 
            user: 'email id', // Your email id 
            pass: '*******' // Your password 
           } 
          }); 
      
      
      
      
          module.exports = 
      
      { 
      
          sendEmail: function sendMail(varhtml,vartext, 
           varsubject,varfrom, varfrom_name,varto, varto_name, 
           reply_to_email) { 
      
      
          //setup e-mail data with unicode symbols 
          var mailOptions = { 
      
           to: [varto], // list of receivers 
           subject: varsubject, // Subject line 
           text: vartext, // plaintext body 
           html: varhtml // html body 
          }; 
      
      
          console.log(mailOptions); 
      
          // send mail with defined transport object 
          transporter.sendMail(mailOptions, function (error, info) { 
           if (error) { 
            return console.log(error); 
           }else{ 
           return console.log(info); 
           } 
          }); 
      

      } }

    나는 즉시 응답을 보내려고합니다. 나는 이메일을 기다릴 필요가 없다. 그렇게하기 위해 메일을 루프를 사용하지만 비동기 적으로 보낼 생각이다.

    Currenlty, 메일을 보내기 전에 답장을 보내고 메일 기능을 호출합니까? 다른 사람이 그 api에 다른 요청을 보내면 node.js가 단일 스레드이고이 스레드가 코드 실행을 기다리고 있기 때문에 평소보다 더 많은 시간이 걸릴 것입니다 (이전 API 호출로 메일을 보내고 있음). 스레드는 그 파일의 또 다른 인스턴스를 작성하여 단지

    호프 희망을 올바르게 설명 할 수 있습니다. 원하는 결과를 달성하기 위해,이 기능은 다음과 같이 호출 할 수있는 우려

    +0

    for 루프 (또는 다른 루프)를 수행하는 동안 sendEmail 함수를 호출하면 원하는 것을 수행 할 수 있습니다. 루프 루프 (lol)로 모든 메일을 시작하고 전송기에 대해 허튼짓을하지 마십시오.sendEmail 결과 – yBrodsky

    +0

    Currenlty, 메일을 보내기 전에 응답을 보내고 메일 기능을 호출합니까? 나는 그것에 대한 질문을 업데이 트 –

    +0

    그 작동하지 않습니다. transporter.sendEmail과 같은 비동기 함수가 있다면 콜백이나 약속을 구현해야합니다. examplify에 대한 답변을 게시하겠습니다. – yBrodsky

    답변

    0
    sendEmail: (somevariables balbla) { 
        //some code 
        transporter.sendEmail((err, res) => { 
        console.log(err); 
        console.log(res); 
        }); 
    } 
    

    이 있으면 알려 주시기 바랍니다 :

    for(let i = 0; i < 100; i++) { 
        sendEmail(someParams); 
    } 
    

    그것은 배려하지, 백 번 호출됩니다도 응답을 기다리고있다. 이제 경우 이메일 기능은 다음과 같이이었다 :

    sendEmail: (somevariables balbla, callback) { 
        //some code 
        transporter.sendEmail((err, res) => { 
        console.log(err); 
        console.log(res); 
        return callback(err, res); 
        }); 
    } 
    

    당신은 여전히 ​​루프를 호출하고 콜백에 의해 반환되는 어떤 무시할 수 있습니다. 함수는 다음과 같은 경우 :

    sendEmail: (somevariables balbla, callback) { 
        return new Promise((resolve, reject) => { 
        //some code 
        transporter.sendEmail((err, res) => { 
         console.log(err); 
         console.log(res); 
         return resolve(res); 
        }); 
        }); 
    } 
    

    TL; DR 루프에서 함수를 호출하고 당신이 원하는 것을 할 것입니다. 원한다면, 다른 시나리오에서 그 결과를 기다리고 싶을 때를 대비하여 함수가 약속이나 콜백을 반환하도록 할 수 있습니다.

    +0

    내 기능을 호출하고 응답을 기다리지 않고 코드를 변경하지 않을 것임을 의미합니다. 권리 ? –

    +0

    예. 그래도 코드에는 결코 돌아 가지 않을 반환이 있습니다. 당신은 미래에 그것을 필요로 할 경우를 대비하여 약속이나 콜백을 반환하기 위해 그러한 수정을 할 수 있습니다. – yBrodsky

     관련 문제

    • 관련 문제 없음^_^