Nodemailer 无法从 Docker 容器内发送电子邮件

Nodemailer cannot send email from within Docker container

我已经 searching/reading/trying 在 Internet 上到处转了大约 3 周,然后才发帖到这里...

上下文:

import type { NextApiRequest, NextApiResponse } from "next";
import * as nodemailer from "nodemailer";

export default async (req: NextApiRequest, res: NextApiResponse) => {
  res.statusCode = 200;

  let transporter = nodemailer.createTransport({
    host: process.env.NM_HOST,
    port: parseInt(process.env.NM_PORT),
    secure: true,
    auth: {
      user: process.env.NM_USER,
      pass: process.env.NM_PASS,
    },
    tls: {
      rejectUnauthorized: false,
    },
  });
  // console.log("User:");
  // console.log(process.env.NM_USER);

  let info = await transporter.sendMail({
    from: "Website <xxx@xxx.com>",
    to: "Website <xxx@xxx.com>",
    subject: "New contact",
    text: "NAME:\n" + req.body.data.name + "\n----------\nEMAIL:\n" + req.body.data.email + "\n----------\nBODY:\n" + req.body.data.body,
  }, function (err, info) {
    if (err) {
      console.log(err)
    } else {
      console.log(info);
    }
  });
  console.log("Message sent: %s", info);

  res.json({
    a: req.body.data.name,
    b: req.body.data.email,
    c: req.body.data.body,
  });
};

问题:

Error: connect ECONNREFUSED 127.0.0.1:465
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1133:16) {
  errno: -111,
  code: 'ESOCKET',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 465,
  command: 'CONN'
}

我已经尝试过的和观察到的:

非常感谢任何愿意提供帮助的人。

找出不起作用的地方:我使用的是 docker-compose 没有 --env-file 选项。

这样我试图在我的应用程序中访问的所有 环境变量 (例如 PORT、HOST、PSWD、USR)都被保留 undefined(这是因为这些环境变量在构建步骤中尚未内置 - 设计选择,而是在运行时使用 process.env)

访问

解决方案(根据您的情况更改 .env 文件部分):

docker-compose --env-file ./.env.production

有用的官方资源(docker-compose) Docker-compose using --env-file option