2017-07-28 100 views
1

我试图从一个通过register365运行express的docker容器发送一些电子邮件。带有Docker的Nodemailer

这是所使用的代码

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" <[email protected]>',text: body, subject: ' WE NEED THE CONTENT AND DESIGN OF THIS EMAIL!!!!'}); 
    } 
    catch(error) { 
     console.log('Email error'); 
     console.dir(error); 
    } 

} 
} 

这是所有工作的罚款,如果我跑快递与故宫的开始,但如果我和搬运工运行它,它会失败,此错误Error: Connection closed

它只是失败使用smtp.reg.356.net,如果我使用的是Gmail,它会很好地工作

这是我使用

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返回猫/etc/resolv.conf中的主机

domain Hitronhub.home 
nameserver 89.101.160.5 
nameserver 89.101.160.4 

这个telnet: could not resolve smtp.reg.356.net/25: Name or service not known

输出在泊坞窗容器

search hitronhub.home 
nameserver 127.0.0.11 
options ndots:0 
+0

启动容器并进入bash shell。执行命令'telnet smtp.reg.356.net 25'并在问题 –

+0

完成后输出,这是输出telnet:无法解析smtp.reg.356.net/25:名称或服务未知。谢谢 – troyz

+0

主机上和docker容器内还有一个'cat/etc/resolv.conf'。很可能这是你需要的DNS设置。一旦我确认问题 –

回答

2

创建一个文件/etc/docker/daemon.json

{ 
"dns": ["89.101.160.5", "89.101.160.4"] 
} 

重新启动docker服务,然后重试,看看它是否适用于您。

你可能在办公室网络上有你应该使用的自己的DNS服务器。所以你需要告诉Docker守护进程它的容器应该使用哪个DNS服务器。这就是造成这个问题的原因。 daemon.json文件可用于更改守护程序配置。

+0

解决了这个问题,谢谢! 你介意给我解释是什么问题? – troyz

+0

更新了答案,看看这个解释是否有帮助? –

+0

是的,非常有帮助。非常感谢! – troyz