解决方案似乎摆在眼前,但到目前为止,我尝试的所有操作均无效。我正在使用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>
答案 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>
祝您好运,希望对您有所帮助:)