Form在localhost上正常工作,但是一旦部署就会​​抛出404

时间:2019-10-27 11:31:09

标签: node.js forms post nodemailer

解决方案似乎摆在眼前,但到目前为止,我尝试的所有操作均无效。我正在使用nodemailer通过表单发送电子邮件,它在本地主机上运行良好,但是当我部署它时,它不起作用。我认为这与路由有关,但我无法弄清楚。我应该在“动作”和“ app.post”上有什么?我在动机上使用子域来测试表单。


const nodemailer = require ('nodemailer')
const express = require ('express')
const bodyParser = require ('body-parser')
const app = express()

app.use (express.static('./public'))
app.use (bodyParser.json())
app.use (bodyParser.urlencoded ({extended: true}))

const transporter = nodemailer.createTransport({
    host: "biz260.inmotionhosting.com",
      port: "465",
      secure: true,
      auth: {
         user: "test@learningtodom.com", 
         pass: "xxxxxx"
      }
})

function sendEmail(mail) {
    var mailOptions = {
      from: "test@learningtodom.com",
      to: "pablo.football.coach@gmail.com",
      subject: "Mail",
      html: mail.body
    }

transporter.sendMail (mailOptions, function (err, info){
    if (err) {
        console.log (err)
    } 
    else {
        console.log('Done' + info.response)
    }
})
}

app.post ('/send_email_form', (req, res) => {
   mail = {
       to : req.body.name, 
       subject: req.body.second,
       body: req.body.second
   }
   sendEmail(mail)
   res.redirect ('/')
})

app.listen (8100, () => {
    console.log ('Server Running at 8100')
})

表格

<form action="/send_email_form" method="POST">
            <div class="form-row">
              <div class="col-md-4 mb-3">
                <label for="validationServer01">First name</label>
                <input type="text" name ="name" class="form-control is-valid" id="validationServer01" placeholder="First name" value="Mark" required>
                <div class="valid-feedback">
                  Looks good!
                </div>
              </div>

1 个答案:

答案 0 :(得分:1)

这可能是您的端口设置,8100不是要在生产服务器上打开的普通端口。最常见的是在端口80上看到常规HTTP流量,在端口443上看到HTTPS流量。

如果可以在远程服务器上打开端口8100,则应执行此操作以检查服务器在该端口上是否可访问。它可以帮助添加一个简单的状态检查端点,例如

app.get ('/status', (req, res) => {
  res.json({ status: 'ok' })
})

,然后通过在浏览器中尝试http://[yourdomain]:8100/status来确认您可以访问它。

我强烈建议您从环境变量(例如node.env.PORT)中读取端口号,以便您可以轻松地在8100上本地服务,但是在部署到远程服务器上时可以切换到80和/或443。

一旦确认可以打通GET /状态路由,那么其他任何问题都将与nodemailer设置有关。

此外,请注意,使用类似nodemailer的库可能会使您的邮件进入垃圾邮件文件夹。诸如Sendgrid和Mailgun之类的付费服务努力工作以确保电子邮件发件人的真实性,因此使用它们发送的电子邮件更有可能被发送为非垃圾邮件。

如果您将成为此邮件的唯一收件人,并且可以在垃圾邮件文件夹中找到它,请确保将其标记为非垃圾邮件,并尝试让您的收件箱知道您信任来自该地址的电子邮件。 / p>

祝您好运,希望对您有所帮助:)