Why am I getting an NodeMailer HELO 501 hostname error? - node.js

I am getting an NodeMailer error when I try to connect to my NodeMailer SMTP server (which happens to be on the same machine):
error: { Error: Invalid HELO. response=501 Error: Syntax: HELO hostname: 501 Error: Syntax: HELO hostname
at SMTPConnection._actionHELO (/home/hunter/projects/proxy-e/node_modules/nodemailer/lib/smtp-connection/index.js:1139:27)
at SMTPConnection._processResponse (/home/hunter/projects/proxy-e/node_modules/nodemailer/lib/smtp-connection/index.js:762:20)
at SMTPConnection._onData (/home/hunter/projects/proxy-e/node_modules/nodemailer/lib/smtp-connection/index.js:558:14)
at TLSSocket._socket.on.chunk (/home/hunter/projects/proxy-e/node_modules/nodemailer/lib/smtp-connection/index.js:510:47)
at TLSSocket.emit (events.js:182:13)
at addChunk (_stream_readable.js:283:12)
at readableAddChunk (_stream_readable.js:264:11)
at TLSSocket.Readable.push (_stream_readable.js:219:10)
at TLSWrap.onread (net.js:639:20)
code: 'EPROTOCOL',
response: '501 Error: Syntax: HELO hostname',
responseCode: 501,
command: 'HELO' }
I am attempting to connect via:
let optionsTwo = {
port: 465,
host: 'mydomain.com',
secure: true,
name: 'mydomain.com',
transactionLog: true,
debug: true,
};
const connection = new SMTPConnection(optionsTwo);
connection.connect(function() {
console.log("connected?");
let authTwo = {
user: 'foo',
pass: 'bar'
};
connection.login(authTwo, function(err) {
if (err) {
console.log("err::", err);
}
console.log("logged in?");
});
});
connection.on("error", function(err) {
console.log("error: ", err);
});
My NodeMailer server:
let options = {
secure: false,
authOptional: false,
secure: true,
key: hskey,
cert: hscert,
ca: [hschain],
onAuth(auth, session, callback) {
...
},
}
const emailServer = new SMTPServer(options);
emailServer.listen(465);
My server has a registered domain name and a certificate from LetsEncrypt. I haven't been able to figure out why I continue to get this HELO hostname 501 error. From digging into the NodeMailer JS files I found this:
Handles server response for STARTTLS command. If there's an error
* try HELO instead, otherwise initiate TLS upgrade. If the upgrade
* succeedes restart the EHLO
Which makes me assume that STARTTLS has some sort of error so it's attempting to use HELO and failing, but why?

For some reason name: 'mydomain.com', is incorrect, and when removing it, I no longer get the error.

Related

could not setup dkim in nodemailer

I want to setup DKIM in nodemailer. Without DKIM, tls and "secure: true" my code works fine however, when I run code changed for DKIM it shows error:
Code:
var nodemailer = require('nodemailer');
var fs = require("fs");
const pr_key = fs.readFileSync("private.key", {encoding: "utf-8"})
const transporter = nodemailer.createTransport({
port: 465, // Postfix uses port 25
host: 'example.com',
secureConnection: false,
tls: {
ciphers:'SSLv3'
// rejectUnauthorized: false
},
secure: true,
dkim: {
domainName: "mail.example.com",
keySelector: "mail",
privateKey: pr_key
},
auth: {
user: "abc",
pass: "def"
},
});
var message = {
from: 'noreply#example.com',
to: 'pleasereply#example.com',
subject: 'Confirm Email',
text: 'Please confirm your email',
html: '<p>Please confirm your email</p>'
};
transporter.sendMail(message, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
});
Error Message:
[Error: 7336:error:1408F10B:SSL routines:ssl3_get_record:wrong version
number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332: ] {
library: 'SSL routines', function: 'ssl3_get_record', reason:
'wrong version number', code: 'ESOCKET', command: 'CONN' }
I have already configured TXT record for DKIM in DNS and SMTP server running on my server side is programed using library "smtp-server" module of nodejs.
What I tried:
I tried changing port to 25, 2525, 465 and 143
Tried every combination of host, domainname for domain "example.com" and tried keySelector "mail" and "#".
I tried commenting "secureConnection" and "tls: {}" and then changing to "secure: false" which results in other error:
Error: self signed certificate
at TLSSocket.onConnectSecure (node:_tls_wrap:1530:34)
at TLSSocket.emit (node:events:526:28)
at TLSSocket._finishInit (node:_tls_wrap:944:8)
at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:725:12) { code: 'ESOCKET', command: 'CONN' }
i tried to change "to:" property of message object to my gmail account just for testing but still got same message saying I got wrong version
Help me resolving this issue.

Nodemailer error: Error: connect ECONNREFUSED 127.0.0.1:587 suddenly appears

So I´m currently updating my JS backend to TS.
The project was written back in 2018 or 2019 and had some outdated stuff going on.
But it actually worked all well.
Now, for some reason, nodemailer wont work anymore and throws this error:
Error: connect ECONNREFUSED 127.0.0.1:587
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16) { errno: -61, code: 'ESOCKET', syscall: 'connect', address:
'127.0.0.1', port: 587, command: 'CONN' }
I know there have been posts on this topic, but I don´t think my configuration is wrong, because it worked before totally fine and I didn´t really change anything, except for adding some types.
// defining transport to connect to mail host
const transport = nodemailer.createTransport({
host: process.env.EMAIL_PROVIDER,
port: 587,
tls: {
ciphers: 'SSLv3',
rejectUnauthorized: false,
},
debug: true,
auth: {
user: process.env.EMAILADDRESS_SENDER,
pass: process.env.EMAILPASSWORD,
},
});
export const sendOrderCreatedEmail = async (customer: Customer, paymentId: string) => {
const mailOptions: MailOptions = {
from: process.env.EMAILADDRESS_SENDER!,
to: process.env.EMAILADDRESS_RECEIVER!,
subject: `new Audit ${paymentId}`,
html: ...,
};
await sendEmail(mailOptions);
};
const sendEmail = async (mailOptions: MailOptions) => {
// send email with defined transport
transport.sendMail(mailOptions).catch(err => {
console.log(err);
});
};
"nodemailer": "^6.7.5",
any idea what could be wrong there? Cheers!

Getting unrecognized authentication type error with node.js nodemailer module

I am trying to connect to a microsoft mail server, with node.js nodemailer module. But I get an error.
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: 'mysmtp.server.com',
port: 25,
secure: false, // true for 465, false for other ports
requireTLS: true,
ignoreTLS: false,
tls : {
rejectUnauthorized: false
},
authMethod: 'LOGIN',
auth: {
type: 'login',
user: 'account#domain.com', // generated ethereal user
pass: 'password' // generated ethereal password
}
});
transporter.verify(function(error, success) {
if (error) {
console.log(error);
} else {
console.log('Server is ready to take our messages');
}
});
ERROR:
{ Error: Invalid login: 504 5.7.4 Unrecognized authentication type
at SMTPConnection._formatError (C:\Users\user\Desktop\mail\node_modules\
nodemailer\lib\smtp-connection\index.js:577:19)
at SMTPConnection._actionAUTHComplete (C:\Users\user\Desktop\mail\node_m
odules\nodemailer\lib\smtp-connection\index.js:1306:34)
at SMTPConnection._responseActions.push.str (C:\Users\user\Desktop\mail\
node_modules\nodemailer\lib\smtp-connection\index.js:349:26)
at SMTPConnection._processResponse (C:\Users\user\Desktop\mail\node_modu
les\nodemailer\lib\smtp-connection\index.js:733:20)
at SMTPConnection._onData (C:\Users\user\Desktop\mail\node_modules\nodem
ailer\lib\smtp-connection\index.js:529:14)
at TLSSocket._socket.on.chunk (C:\Users\user\Desktop\mail\node_modules\n
odemailer\lib\smtp-connection\index.js:680:51)
at emitOne (events.js:96:13)
at TLSSocket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at TLSSocket.Readable.push (_stream_readable.js:134:10)
code: 'EAUTH',
response: '504 5.7.4 Unrecognized authentication type',
responseCode: 504,
command: 'AUTH PLAIN' }
Does anyone know what is wrong?
Thanks

Error 535 while setting up nodemailer with GoDaddy

I'm wondering if anyone has figured out how to use GoDaddy hosted email with nodemailer. I have an email submission box from my contact form, and it triggers the following script:
function sendEmail ( to, subject, body ) {
var transporter = nodemailer.createTransport({
service: 'Godaddy',
host: "relay-hosting.secureserver.net",
port: 465,
secureConnection: true,
auth: {
user: 'email#godaddydomain.com',
pass: 'password'
}
});
var mailOptions = {
from: 'email#godaddydomain.com',
to: to,
subject: subject,
text: body
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
I've tried a few different options, and made sure my ports are all open, but I'm having a hard time with the authentication. I keep getting errors like this:
{ Error: Invalid login: 535 Authentication Failed for email#godaddydomain.com. User does not have any relays assigned.
at SMTPConnection._formatError (/var/www/node/node_modules/nodemailer/lib/smtp-connection/index.js:577:19)
at SMTPConnection._actionAUTHComplete (/var/www/node/node_modules/nodemailer/lib/smtp-connection/index.js:1306:34)
at SMTPConnection._responseActions.push.str (/var/www/node/node_modules/nodemailer/lib/smtp-connection/index.js:349:26)
at SMTPConnection._processResponse (/var/www/node/node_modules/nodemailer/lib/smtp-connection/index.js:733:20)
at SMTPConnection._onData (/var/www/node/node_modules/nodemailer/lib/smtp-connection/index.js:529:14)
at Socket._socket.on.chunk (/var/www/node/node_modules/nodemailer/lib/smtp-connection/index.js:481:47)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:547:20)
code: 'EAUTH',
response: '535 Authentication Failed for email#godaddydomain.com. User does not have any relays assigned.',
responseCode: 535,
command: 'AUTH PLAIN' }
Any thoughts or suggestions would be really appreciated.
It seems like this error is related to the hostname. Try this one:
var transporter2 = nodemailer.createTransport({
service: 'Godaddy',
host: "smtpout.secureserver.net",
secureConnection: true,
port: 465
})
I was facing the same error. I changed configuration to the following:
var transporter = nodemailer.createTransport({
host: "smtpout.secureserver.net",
secure: true,
secureConnection: false, // TLS requires secureConnection to be false
tls: {
ciphers: "SSLv3",
},
requireTLS: true,
port: 465,
debug: true,
auth: {
user: "xxxx#yyyy.com",
pass: "pass",
},
});
It worked like a charm for me.
In case anyone's still looking for this (as I have been the last few days!), I found all the server information GoDaddy was suggesting was completely wrong. Found the answer in cPanel - if you go to the main bit, and click on 'Email Accounts', on your account it should have an option on the right saying 'Connect Devices'. Click on that and it'll give you the correct server and port information for what you need, which for me ended up being this:
var transporter = nodemailer.createTransport({
host: "sxb1plzcpnl487525.prod.sxb1.secureserver.net",
secure: true,
secureConnection: true,
port: 465,
auth: {user: "yourcpanelusername#yourdomain.com", pass: "yourcpanelpassword"},
tls: {rejectUnauthorized: false}
});
Took me forever to find that specific weird server it needed. Hope this helps. Apologies for formatting, it's my first post here but I wanted to help as I've spent days on this now.

Connection timeout error when sending mail from Zohomail using Nodemailer

Below is my Node app.js code. With these settings, I am receiving a connection timeout error. Any idea what I am missing here?
var nodemailer = require("nodemailer");
var transporter = nodemailer.createTransport({
host: 'smtp.zoho.com',
port: 465,
secure: true, // use SSL
auth: {
user: '<myemail#example.com>',
pass: '<myemailpassword>'
}
});
var mailOptions = {
from: "<fromemail#example.com>",
to: "<toemail#example.com>",
subject: "Hello",
generateTextFromHTML: true,
html: { path: './tmpl.html' }
};
transporter.sendMail(mailOptions, function(error, response) {
if (error) {
console.log(error);
} else {
console.log(response);
}
transporter.close();
});
Error shown
{ Error: Connection timeout
at SMTPConnection._formatError (/home/ubuntu/workspace/mailapp/node_modules/nodemailer/lib/smtp-connection/index.js:557:19)
at SMTPConnection._onError (/home/ubuntu/workspace/mailapp/node_modules/nodemailer/lib/smtp-connection/index.js:530:20)
at Timeout._connectionTimeout.setTimeout (/home/ubuntu/workspace/mailapp/node_modules/nodemailer/lib/smtp-connection/index.js:248:18)
at ontimeout (timers.js:380:14)
at tryOnTimeout (timers.js:244:5)
at Timer.listOnTimeout (timers.js:214:5) code: 'ETIMEDOUT', command: 'CONN' }
Can anyone please help me?
Some cloud providers disable ports like 465 and 587, try using port 2525 instead of 465.
Update
Since you're using Cloud9 for this I found out they have blocked all outbound smtp calls from their servers. If you need to send anyways you need to choose another cloud provider or use one of their recommended services.
https://community.c9.io/t/how-can-i-send-email-from-my-app/1262

Resources