为什么 Astro 项目中的 Nodemailer 在生产环境中不发送邮件?

问题描述 投票:0回答:1

我正在使用 astro 进行一个项目,并尝试使用 nodemailer 作为我的联系表单。这可以很好地将邮件发送到我期望的邮件。但不在生产中发送邮件。这是部署在netlify上的。

---
export const prerender = false;
import { createTransport } from "nodemailer";
import RawLayout from "../layouts/RawLayout.astro";
if (Astro.request.method === "POST") {
try {
const data = await Astro.request.formData();
const name = data.get("name");
const email = data.get("email");
const subject = data.get("subject");
const message = data.get("message");

    const emailBody = `Full Name: ${name}\nEmail: ${email}\nSubject: ${subject}\n\nMessage:\n${message}`;
    
    const transporter = createTransport({
      service: "gmail",
      auth: {
        user: "****@gmail.com",
        pass: "****",
      },
    });
    
    async function main() {
      const info = await transporter.sendMail({
        from: "****@gmail.com", // sender address
        to: "****@gmail.com", // list of receivers
        subject: "📬 New Response", // Subject line
        text: emailBody, // plain text body
      });
    }
    main().catch(console.error);

} catch (error) {
if (error instanceof Error) {
console.error(error.message);
}
}
}
---

这是我的 netlify 日志:

ERROR 错误:SMTPConnection._formatError 连接超时 (/var/task/node_modules/nodemailer/lib/smtp-connection/index.js:798:19) 在 SMTPConnection._onError 处 (/var/task/node_modules/nodemailer/lib/smtp-connection/index.js:784:20) 超时时。 (/var/task/node_modules/nodemailer/lib/smtp-connection/index.js:237:22) 在 listOnTimeout (节点:内部/计时器:569:17) process.processTimers (节点:内部/定时器:512:7) { 代码: 'ETIMEDOUT',命令:'CONN'

本地开发环境没有任何问题。

javascript node.js nodemailer astrojs
1个回答
0
投票

您收到此错误是因为传输配置变量很可能不正确。我之前使用

service: "gmail"
时遇到过问题,但以下配置为我修复了错误:

const transporter = createTransport({
  host: "smtp.gmail.com",
  port: 465, // port for SSL
  secure: true, // use TLS
  auth: {
    user: "****@gmail.com",
    pass: "****",
  },
});

另一件事需要注意的是,如果您启用了 2FA,您将无法使用您的个人密码 - 您必须按照此处

的详细说明生成应用程序密码
© www.soinside.com 2019 - 2024. All rights reserved.