Форма отлично работает на localhost, но выбрасывает 404 после развертывания - PullRequest
0 голосов
/ 27 октября 2019

Решение кажется перед глазами, но все, что я пробовал до сих пор, не сработало. Я использую nodemailer для отправки электронной почты через форму, и она отлично работает на локальном хосте, но когда я ее развертываю, она не работает. Я думаю, что это как-то связано с маршрутизацией, но я не могу понять это. Что я должен иметь на "action" и "app.post"? Я использую поддомен на Inmotion, чтобы проверить форму.


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 Ответ

1 голос
/ 27 октября 2019

Это могут быть настройки вашего порта, 8100 не является обычным портом, который должен быть открыт на производственном сервере. Чаще всего можно увидеть обычный HTTP-трафик на порту 80 и HTTPS-трафик на порту 443.

Если возможно открыть порт 8100 на удаленном сервере, вы должны сделать это, чтобы проверить, доступен ли ваш сервер. в этом порту. Это может помочь добавить простую конечную точку проверки состояния, такую ​​как

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

, а затем подтвердить, что вы можете получить к ней доступ, попробовав http://[yourdomain]:8100/status в браузере.

Я настоятельно рекомендуюсчитывание номера порта из переменных среды (например, node.env.PORT), чтобы вы могли легко обслуживать локально на 8100, но затем переключаться на 80 и / или 443. при развертывании на удаленном сервере.

После подтверждения того, что выможет найти маршрут GET / status, тогда любая другая проблема, с которой вы столкнетесь, будет связана с настройкой вашего nodemailer.

Кроме того, помните, что использование такой библиотеки, как nodemailer, может привести к тому, что ваша почта попадет в папку спама,Платные службы, такие как Sendgrid и Mailgun, прилагают все усилия, чтобы гарантировать подлинность отправителей электронной почты, поэтому отправляемые с их помощью электронные письма с большей вероятностью будут доставляться не как спам.

Если вы собираетесь быть единственным получателем этой почты, и можете найти его в папке со спамом, убедитесь, что пометили его как не спам, и попробуйте сообщить входящим сообщениям, что вы доверяете электронным письмам с этого адреса.

Удачи, надеюсь, это поможет :)

...