【问题标题】:How to send email in the background using nodemailer for NodeJS application?如何使用 nodemailer 为 NodeJS 应用程序在后台发送电子邮件?
【发布时间】:2017-07-30 12:39:25
【问题描述】:

我正在构建一个 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 作业。

但我不确定如何转换代码以将其作为作业发送,而不是在数据库事务之后发送和等待。请帮我解决这个问题。

【问题讨论】:

    标签: node.js angular asynchronous cron nodemailer


    【解决方案1】:

    在 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
              });
    

    【讨论】:

      【解决方案2】:

      使用 Process.nextTick() 发送电子邮件

      【讨论】:

        【解决方案3】:

        我们知道nodejs请求和响应是流式的,你可以在发送响应流后做一些事情,这样响应时间会减少,其他事情会在向客户端发送响应后异步继续。

        您可以成功地向客户端发送响应,然后您可以调用发送邮件功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-19
          • 1970-01-01
          • 2021-12-28
          • 2023-03-27
          相关资源
          最近更新 更多