我正在使用Sendgrid API从Node.js项目发送电子邮件。在我的本地计算机上运行时,这可以正常工作,但是现在我已将邮件不发送到Digital Ocean(Ubuntu)。我已经了解到,默认情况下,Digital Ocean会阻止smtp端口,您显然可以通过命令行打开它们,但是我找不到关于如何执行此操作的容易理解的解释。
const nodemailer = require("nodemailer");
const sendgridTransport = require('nodemailer-sendgrid-transport');
const transporter = nodemailer.createTransport(sendgridTransport({
auth: {
api_key: process.env.SENDGRID_API
}
}));
return transporter.sendMail({
to: 'info@example.com',
from: email,
subject: subject,
html: `<h1>Contact Form</h1>
<p>Name: ${name}</p>
<p>Email: ${email}</p>
<p>${comments}</p>
`
});
更新
如果我删除api密钥的.env并将其实际硬编码为例如:
const transporter = nodemailer.createTransport(sendgridTransport({
auth: {
api_key: '12345677788999'
}
}));
然后我的电子邮件发送。这是我的.env文件(我正在使用dotenv)
DB_USER=username
DB_PASSWORD=password
DB_NAME=mydbname
SENDGRID_API=12345677788999
所以,不确定为什么会这样吗?
答案 0 :(得分:0)
您是否已在环境中导出此“ SENDGRID_API”。然后,只有您可以使用process.env.SomeEnvironmentVar。
如果您正在使用PM2。您必须将其添加到生态系统文件中。然后它将使用该配置并启动您的应用程序。使所有变量都可用。
答案 1 :(得分:0)
我在使用SendGrid,Digitalocean(Ubuntu)和PM2时遇到了同样的问题。
似乎PM2不会自动检测.env文件中的更改,就像@himank在他的回答中提到的那样,因此我不得不从PM2中删除该项目,然后再次启动它。
请注意: