发送电子邮件后Nodemailer非常慢

Posted

技术标签:

【中文标题】发送电子邮件后Nodemailer非常慢【英文标题】:Nodemailer very slow after sending the email 【发布时间】:2017-09-13 14:32:27 【问题描述】:

我在用户提交联系表格后使用nodemailer发送电子邮件,然后用户将被引导到感谢页面。我现在在 cloud9 上从事这个项目。这是我的代码:

var express                 = require("express"),
    bodyParse               = require("body-parser"),
    multer                  = require("multer"),
    nodemailer              = require("nodemailer");

var app = express();

app.use(bodyParse.urlencoded(extended: true));

var smtpTransport = nodemailer.createTransport(
service: "Gmail",
auth: 
    type: "OAuth2",
    user: "xxxxx@gmail.com",
    clientId: "xxxxxx",
    clientSecret: "xxxxx",
    refreshToken: "xxxxx",
    accessToken: "xxxxx"
    
);
app.post("/upload", function(req, res)
  var mailOptions = 
    from: "xxxx <xxxx@gmail.com", // sender address
    to: "xxxx@gmail.com", // list of receivers
    subject: "xxxx", // Subject line
    text: "xxxx",
    attachments: [
          // file on disk as an attachment
        filename: 'xxxx.txt',
        path: './uploads/' + req.body.filename // stream this file
      
    ]
  ;

 // send mail with defined transport object
 smtpTransport.sendMail(mailOptions, (error, info) => 
   if (error) 
       return console.log(error);
   
   console.log('Message %s sent: %s', info.messageId, info.response);
   );
 )

邮件可以发送成功,提交表单后几秒钟就可以看到,但是页面会一直加载直到出现错误(我在下面附上了错误消息)。在此期间,我会再收到 1 或 2 封相同的电子邮件。

<html>
<head>
  <meta charset='utf-8'> 
  <title>Error 502 - Bad Gateway</title>
  <link rel="stylesheet" type="text/css" 
  href="https://cdn.c9.io/errors/style.css" />
  <style type="text/css">
  .error_content 
    background: rgba(255, 255, 255, 0.23);
    padding: 10px;
    width: 641px;
    margin: 25px 0;
    display: none;
  

  #error-msg 
    display: block;
  
  </style>
</head>
<body class="errorUnknown light">
  <div id="wrapper">
    <h1>Error 502 - Bad Gateway</h1>
    <div class="error_content" id="error-msg">
      <p>Please click <a href="javascript:location.reload(true)">here</a> to try again, if the issue persists please contact <a href="https://c9.io/support">support</a></p>
    </div>

    <a href="http://status.c9.io">Status Page</a> |
    <a href="https://c9.io/support">Support</a> |
    <a href="https://c9.io/dashboard.html">Dashboard</a> |
    <a href="https://c9.io">Home</a>
  </div>
</body>
</html>

QQQQQ:我应该怎么做才能解决这个问题? QQQQQ:是我的代码问题还是cloud9服务器的问题?

【问题讨论】:

【参考方案1】:

这是因为您从未在 app.post() 处理程序中将响应发送回浏览器。因此,浏览器一直在等待从您的服务器收到回复,但它永远不会 - 最终超时。这完全是您的代码,与您的云提供商无关。

在您的app.post() 处理程序中,您需要某种响应内容,例如res.send(xxx),它会告诉浏览器发布请求已完成。如果此 POST 来自 ajax 调用,那么您可以将所需的任何响应发送回客户端 Javascript。如果 POST 请求是浏览器中的表单提交,那么您需要发回浏览器将加载并显示给用户的 HTML 页面。

【讨论】:

谢谢,这就是问题所在。 感谢您告诉我。 @jfriend00 你能检查一下这个吗?我正在发送回复,但它不起作用。 ***.com/q/61552971/3878760

以上是关于发送电子邮件后Nodemailer非常慢的主要内容,如果未能解决你的问题,请参考以下文章

仅在确认付款后,如何在 NodeMailer 中发送电子邮件?

从服务器从 nodemailer 发送电子邮件时出错

在发布路线上使用 nodemailer 发送电子邮件并使用 passport.authenticate 将用户保存到 mongodb

工具Node.js邮件发送组件- Nodemailer 1.0发布

Nodemailer不发送电子邮件

无法使用 nodemailer 从我想要的域发送电子邮件