【发布时间】:2018-12-18 22:38:32
【问题描述】:
长话短说,我想在我的应用程序中添加一个电子邮件系统,所以我决定使用 Nodemailer。在本地主机上一切正常,但是一旦我尝试从我的 heroku 部署站点发送电子邮件,它就会失败并出现 500 内部错误。
我已经用我的 gmail 帐户完成了这些工作,以允许它接受不安全的应用程序和内容。
这是我的 nodemailer 设置:
app.post('/sendMail', (req, res) => {
const { name, email, total } = req.body
const nameCheck = name
.split(' ')
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
const output = `
<p>Thanks for shopping with us, ${nameCheck}.</p>
<p>Your Total is $${total}</p>
<hr />
<p>Gabriel Pozo - React Cart Developer / Owner</p>
<a href="https://reactshoppingcart1.herokuapp.com/">Shop</a>
`
const transporter = nodemailer.createTransport({
service: 'gmail',
port: 25,
secure: false,
auth: {
user: 'beyondutraining@gmail.com',
pass
},
tls: { rejectUnauthorized: false }
})
const mailOptions = {
from: '"Gabriel" <beyondutraining@gmail.com>',
to: email,
subject: 'Your Order',
html: output
}
transporter.sendMail(mailOptions, (error, info) => {
error ? res.sendStatus(500) : res.sendStatus(200)
})
})
这就是我从 React 提供静态文件的方式:
if (process.env.NODE_ENV === 'production') {
app.use(express.static('client/build'))
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
})
}
这就是我分配env 变量的方式:
module.exports = {
PASS: process.env.PASS
}
如果你想要任何其他代码,请告诉我!
【问题讨论】:
-
您可以尝试在三元组之前记录错误吗?这可能会提供堆栈跟踪和错误描述
-
@PatNeedham
null被返回 -
如果你尝试类似
let statusCode = error ? 500 : 200然后res.sendStatus(statusCode)。可能即使error有一个空值,第一种情况仍在评估中。 -
不,仍然会出现该错误。我意识到当我像这样编写代码时:
if (error) res.sendStatus(500) else res.sendStatus(200)它挂起而不是立即失败,所以这可能与我的sendMail函数的编写方式有关。另外,如果这样写:if (error) res.sendStatus(500) res.sendStatus(200)它通过但不发送电子邮件。 -
你解决了这个问题吗?我有同样的问题。要查看错误正在抛出 heroko,请在解决项目的终端中写入此代码“heroku logs --source app”。
标签: javascript node.js reactjs heroku nodemailer