我正在尝试通过 register365 从运行 express 的 docker 容器发送一些电子邮件。
这是使用的代码
export class Emailer {
transporter: nodemailer.Transporter;
constructor() {
this.transporter = nodemailer.createTransport(smtpTransport({
host: 'smtp.reg365.net',
auth: {
user: 'myuser',
pass: mypassword'
}
}));
}
public async sendEmail(to,body) {
try {
return await this.transporter.sendMail({to,from: '"TEST" <user@myuser.ie>',text: body, subject: ' WE NEED THE CONTENT AND DESIGN OF THIS EMAIL!!!!'});
}
catch(error) {
console.log('Email error');
console.dir(error);
}
}
}
如果我用 npm start 运行 express 一切正常,但如果我用 docker 运行它,它将失败并出现此错误 Error: Connection closed
它只会在使用 smtp.reg.356.net 时失败,如果我使用 Gmail,它会完美地工作
这是我正在使用的 docker 文件
FROM node:8
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
RUN npm install -g nodemon
COPY package.json /usr/src/app/
RUN npm install
COPY ./dist /usr/src/app/dist
EXPOSE 3005
EXPOSE 25
CMD [ "npm", "start" ]
非常感谢。
编辑:
根据要求,运行 telnet smtp.reg365.net 25 返回此 telnet: could not resolve smtp.reg.356.net/25: Name or service not known
主机上 cat/etc/resolv.conf 的输出
domain Hitronhub.home
nameserver 89.101.160.5
nameserver 89.101.160.4
在docker容器上
search hitronhub.home
nameserver 127.0.0.11
options ndots:0
最佳答案
创建文件/etc/docker/daemon.json
{
"dns": ["89.101.160.5", "89.101.160.4"]
}
重新启动 docker 服务并重试,看看这是否适合您。
您可能在办公室网络上,该网络有您应该使用的自己的 DNS 服务器。所以你需要告诉 Docker 守护进程它的容器应该使用哪个 DNS 服务器。这就是造成问题的原因。 daemon.json
文件可用于更改守护程序配置。
关于node.js - 带有 Docker 的 Nodemailer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370428/