【问题标题】:Nodemailer - Why does my contact form randomly send a message of "undefined undefined undefined" from undefined?Nodemailer - 为什么我的联系表单会随机从 undefined 发送“undefined undefined undefined”消息?
【发布时间】:2021-11-09 19:39:13
【问题描述】:

我已经为我的作品集网站设置了一个联系表格,效果很好,我有几个朋友使用它给我发了电子邮件。它有四个输入字段,名字、姓氏、电子邮件和消息正文。但是,每隔一段时间我就会收到一封从我的帐户发送的电子邮件“来自未定义的消息”,而其他三个输入字段也都是未定义的。输入字段是必需的,因此它不能是正在提交的空白消息。 Message from contact form。抱歉,如果以前有人问过这个问题,我用谷歌搜索并查看了一些帖子,但找不到任何东西。我只是好奇为什么会这样。另外,我确实使用了 gmail 帐户和 Oauth2 身份验证。

这是联系表单的 HTML:

 <form action="#" class="row contact-form">
                        <div class="col-lg-6 col-md-6 mb-3"><input type="text" placeholder="First Name"
                                id="inputFirstName" class="shadow form-control form-control-lg" required></div>
                        <div class="col-lg-6 col-md-6 mb-3"><input type="text" placeholder="Last Name"
                                id="inputLastName" class="shadow form-control form-control-lg" required></div>
                        <div class="col-lg-12 mb-3"><input type="text" placeholder="Email Address" id="inputEmail"
                                class="shadow form-control form-control-lg" required></div>
                        <div class="col-lg-12 mb-3">
                            <textarea name="message" id="message" rows="8"
                                class="shadow form-control form-control-lg" required></textarea>
                        </div>
                        <div class="text-center d-grid mt-1">
                          
                          <button type="submit" class="btn btn-primary rounded-pill pt-3 pb-3">
                                Send Message
                                <i class="fas fa-paper-plane"></i>
                        </button> 
                        </div>
                    </form>

这就是我的服务器为 nodemailer 设置的方式

   //Oauth Variables
const oauth2Client = new OAuth2(
  process.env.CLIENT_ID,
  process.env.CLIENT_SECRET,
  "https://developers.google.com/oauthplayground"
);

oauth2Client.setCredentials({
  refresh_token: process.env.REFRESH_TOKEN,
});

const accessToken = oauth2Client.getAccessToken();

//Contact Form
app.post("/", (req, res) => {
  //Nodemailer Transporter
    const smtpTransport = nodemailer.createTransport({
    service: "gmail",
    auth: {
      type: "OAuth2",
      user: process.env.EMAIL,
      accessToken: accessToken,
      clientId: process.env.CLIENT_ID,
      clientSecret: process.env.CLIENT_SECRET,
      refreshToken: process.env.REFRESH_TOKEN,
    },
  });
// Nodemailer options
  let mailOptions = {
    from: req.body.email,
    to: process.env.EMAIL,
    subject: `Message from ${req.body.email}`,
    text: `${req.body.nameFirst}  ${req.body.nameLast} \n  ${req.body.message}`,
  };
//Nodemailer Transporter/Sendmail
  smtpTransport.sendMail(mailOptions, (error, info) => {
    if (error) {
      res.send("error");
    } else {
      res.send("success");
    }
  });
});

【问题讨论】:

  • 你有一些代码可以分享吗?
  • 另请注意,您分享的图片显示您是 Yahoo 地址。你可能关心也可能不关心。
  • 感谢 Ian,我添加了一些代码并上传了不同的屏幕截图。
  • 可能是机器人提交的表单不正确或为空,或者有人使用不支持required的旧浏览器提交表单,或者有人手动删除了required,或者有人正在玩弄你的网站试图破解它,或或或... 如果字段未定义,你不应该尝试发送电子邮件。 required 只是为了方便用户,就像任何客户端验证一样;你总是必须在你的服务器上做同样的验证! (如果您想深入了解,请在遇到此问题时记录完整的原始请求标头+正文和用户 IP。)
  • 你读过这篇文章并尝试一步一步来-nodemailer.com/about

标签: javascript nodemailer contact-form


【解决方案1】:

所以我不久前使用了 dnodemailer,您的代码与我的完全不同。虽然这可能是一个改变界面的情况,但这可能值得一试:

const email = new Email({
            message: {
                from: "some-bot@gmail.com",
            },
            preview: false,
            transport: this._transport,
            render: async () => html,
        });

        return new Promise((resolve, reject) => {
            email.send({
                text: html,
                message: {
                    to: user.email,
                    subject: "Email Subject",
                },
            })
            .then(resolve)
            .catch(reject);
        });

我创建了一个实际的电子邮件对象,用于发送电子邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2021-08-19
    • 2016-12-30
    相关资源
    最近更新 更多