【发布时间】:2021-10-30 20:21:17
【问题描述】:
我已经在互联网上到处搜索/阅读/尝试了大约 3 周,然后才在这里发布...
上下文:
- 开发小网站应用程序
- 技术:
- 用于前端和后端(节点)的 Next JS(ReactJs、HTML、CSS)
- Linux 作为主机 (Ubuntu 20.04 LTS)
- Docker 封装应用的容器(基于 node:alpine 镜像)(Docker 版本 20.10.6)
- Nodemailer 节点发送邮件的模块
- 这是使用 Nodemailer 发送电子邮件的代码:
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,
});
};
问题:
- 当我尝试使用 Nodemailer 以“npm run start”或“npm run dev”从 Linux 主机启动我的应用程序来发送电子邮件时,邮件会送达
- 当我尝试使用 Nodemailer 从 Docker 容器启动我的应用程序发送电子邮件时,我收到以下错误(来自应用程序的输出本身)
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'
}
我已经尝试过的和观察到的:
-
ping google.com(和许多其他人)在容器内工作(使用docker exec -ti container-name sh命令) - 以
docker run --dns 8.8.8.8 ...启动容器 -> 相同的结果(上述错误) - 容器和主机的
/etc/resolv.conf不同(但我认为这可能不是重点,因为ping命令正确解析,但如果我错了,请随意说我) - 我不是系统管理员(我是开发人员),所以我不知道这件事中是否隐含了 iptables 或 ufw(防火墙)(顺便说一句,在节点上安装非预安装的软件包很困难:高山)
- 电子邮件服务器身份验证正确(用户名、主机名、密码),因为当我以
npm run start或npm run dev启动我的应用程序时,它可以正常工作 - 在桥接(默认)桥接(使用 docker-compose 自定义)和主机之间切换容器的网络...同样的问题(上述错误)
非常感谢任何愿意提供帮助的人。
【问题讨论】:
标签: node.js docker nodemailer alpine