【问题标题】:Mail not send by nodemailer邮件不是由 nodemailer 发送的
【发布时间】:2019-10-06 20:00:54
【问题描述】:

我正在尝试使用 nodemailer 发送邮件,但代码没有发送邮件,也没有显示任何错误。通过用户输入添加到主题、来自 ejs 表单的消息并使用 nodemailer 我想将邮件发送到 Gmail 帐户,但它没有发送。请任何帮助

mail.ejs

<div class="card">
           <div class="card-header">
            <p>
                <b>Send mail</b>
            </p>
        </div>
            <br/>
                <form action="/send-email" method="post">
                    <div class="col-md-12" style="overflow-x:auto;">

                            <div class="form-group">
                                <input type="text" class="form-control" placeholder="To" name="to" value="">
                            </div>

                            <div class="form-group">
                                <input type="text" class="form-control" placeholder="From" name="from" value="">
                            </div>

                            <div class="form-group">
                                <input type="text" class="form-control" placeholder="Subject" name="message" value="">
                            </div>

                            <div class="form-group">
                                    <textarea class="form-control" id="" rows="4"></textarea>
                            </div>
                            <button type="submit" class="btn btn-primary">Send</button>

                     </div>
                </form>
            <br/>
            <br/>

        </div>

Controller.js

router.get('/donation/mail', async (req,res) => {

  res.render('mail');

});
var transport = nodemailer.createTransport(smtpTransport({
  service: "gmail",
    auth: {
        // should be replaced with real sender's account
        user: 'xxxxx@gmail.com',
        pass: 'mygmailpassword'
    }
  }));

router.post('/send-email', function (req, res) {

  var mailOptions = {
      // should be replaced with real recipient's account
      to: req.body.to,
      from:'xxxxx@gmail.com',
      subject: req.body.subject,
      body: req.body.message
  };
  transport.sendMail(mailOptions, function(error, info) {
    if (error) {
        return console.log(error);
    }
    console.log('Message sent: ' + info.response);
});

res.redirect("/donation");
});

运行后得到消息 enter image description here

我的邮件表格 [在此处输入图片描述][2]

【问题讨论】:

  • 欢迎来到 SO!感谢您充分提出您的第一个问题。您可以改进:除非必要,否则不要使用图像。 POST /send-email 302 195.545ms 62 非常适合文本。
  • 302 出现在哪里 - 在浏览器中,还是在终端控制台日志中?邮件真的发送了吗?从 transport.sendMaiil 调用中获取 302 是没有意义的,也许 302 是 res.redirect 的结果(与您示例中侦听器中的 url 不匹配

标签: node.js nodemailer


【解决方案1】:

在使用 gmail 发送电子邮件之前,您必须允许非安全应用访问 gmail。这可以在您的 gmail 设置中完成:

https://myaccount.google.com/lesssecureapps?pli=1

我还可以推荐以下文章以获取使用 gmail 设置 nodemailer 的分步说明: https://codeburst.io/sending-an-email-using-nodemailer-gmail-7cfa0712a799

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多