I need to set up a local mail server and send emails from it. I use docker-mailserver and try to connect to it from simple NodeJS script that uses Nodemailer.
For docker-mailserver
setup I followed the guide from its docs and changed only the DOMAINNAME
env var to domain name of my server. The resulting docker port
for container is:
993/tcp -> 0.0.0.0:993
143/tcp -> 0.0.0.0:143
25/tcp -> 0.0.0.0:25
587/tcp -> 0.0.0.0:587
From the same machine that runs mailserver docker container I tried to run the mail-sending script, here is it's code:
const nodemailer = require('nodemailer');
let transporter = nodemailer.createTransport({
host: '0.0.0.0',
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: 'user@domain.com',
pass: 'password'
},
tls: { rejectUnauthorized: false },
debug: true,
});
let mailOptions = {
from: '"👻" <user@domain.com>',
to: 'some_account@gmail.com',
subject: 'Hello ✔',
text: 'Hello world?',
html: '<b>Hello world?</b>'
};
transporter.verify((error) => {
if (error) {
return console.error(error);
}
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.error(error);
}
console.log('Message sent: %s', info.messageId);
});
});
But I get only Error: Connection closed
error.
What is the thing I'm missing here to setup correct connection between script and container?
By default container are isolated in docker. You can allow connection between containers in docker by adding link argument when creating your Container USAGE :
Docker run -d --name node_mailer --link EMAIL_SERVER_CONTAINER_NAME nodemailer_image