邮件从本地主机发送,而不是从数字海洋上的实时站点发送

时间:2019-02-07 11:10:26

标签: node.js digital-ocean sendgrid

我正在使用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

所以,不确定为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

您是否已在环境中导出此“ SENDGRID_API”。然后,只有您可以使用process.env.SomeEnvironmentVar。

如果您正在使用PM2。您必须将其添加到生态系统文件中。然后它将使用该配置并启动您的应用程序。使所有变量都可用。

答案 1 :(得分:0)

我在使用SendGrid,Digitalocean(Ubuntu)和PM2时遇到了同样的问题。

似乎PM2不会自动检测.env文件中的更改,就像@himank在他的回答中提到的那样,因此我不得不从PM2中删除该项目,然后再次启动它。

请注意: