簡體   English   中英

如何使用Nodemailer for NodeJS應用程序在后台發送電子郵件?

[英]How to send email in the background using nodemailer for NodeJS application?

我正在構建一個Angular 4和Node應用程序。 一旦任何用戶在前端注冊,我就將其數據存儲在數據庫中,然后希望使用nodemailer軟件包向他們發送成功的注冊電子郵件。

這是Node js代碼:

    router.post('/', function(req, res, next) {
       SOME_DATABASE_FUNC() {
           if(FAILED_CASE) {
              return res.status(500).json({
                  title: 'An error occurred',
                  status: 500,
                  error: error
            });

           var mailOptions {...}

           transporter.sendMail(mailOptions, function (error, info) {
              if (error) {
                 console.log(error);
                 return res.status(500).json({
                 title: 'An error occurred',
                 status: 500,
                 error: error
               });
              }
              console.log('Message', info.messageId, info.response);
              return res.status(200).json({
                 message: 'Emailed successfully',
                 details: info
              });
          });
         }
       }
    });

該代碼可以正常工作,但是發送電子郵件需要花費幾秒鍾的時間,並且用戶必須等待顯示似乎不太合適的成功響應。 相反,我想在后台將其發送為異步函數或cron作業。

但是我不確定如何轉換代碼以將其作為作業發送,而不是在數據庫事務處理之后發送和等待。 請幫我解決這個問題。

使用Process.nextTick()發送電子郵件

在transporter.sendMail塊之外發送響應。 因此,它不會等待電子郵件發送過程完成。

transporter.sendMail(mailOptions, function (error, info) {
          if (error) {
             console.log(error);
             return res.status(500).json({
             title: 'An error occurred',
             status: 500,
             error: error
           });
          }
          console.log('Message', info.messageId, info.response);
      });
          return res.status(200).json({
             message: 'Emailed successfully',
             details: info
          });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM