Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nodemailer: Greeting never received

When trying to send email within Node using Nodemailer (https://github.com/nodemailer/nodemailer), the call to the sendMail of the Nodemailer transporter is raising the error Greeting never received when using in conjunction with an Ethereal test email account.

I have tried using both a "callback approach" and also an "async/await" approach, but the same error is thrown in both scenarios. Both examples are pretty much straight from the working examples in the Nodemailer documentation. Maybe I'm missing something simple? :)

Here is the "callback approach" code that is producing the error:

it('can send email with a dynamic test account', done => {
    nodemailer.createTestAccount((err, account) => {
        const transporter = nodemailer.createTransport({
            host: 'smtp.ethereal.email',
            port: 587,
            auth: {
                user: account.user, // generated ethereal user
                pass: account.pass // generated ethereal password
            }
        });

        const mailOptions = {
            from: '"Fred Foo 👻" <[email protected]>', // sender address
            to: '[email protected], [email protected]', // list of receivers
            subject: 'Hello ✔', // Subject line
            text: 'Hello world?', // plain text body
            html: '<b>Hello world?</b>' // html body
        };

        // send mail with defined transport object
        transporter.sendMail(mailOptions, (error, info) => {
            if (error) {
                return console.log(error);
            }
            console.log('Message sent: %s', info.messageId);
            console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
            // Message sent: <[email protected]>
            // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...

            done();
        });
    });
}).timeout(10000);

And here is the stacktrace of the error:

{ Error: Greeting never received
    at SMTPConnection._formatError (/Users/<username>/projects/personal/learning-tests/javascript/nodemailer/node_modules/nodemailer/lib/smtp-connection/index.js:606:19)
    at SMTPConnection._onError (/Users/<username>/projects/personal/learning-tests/javascript/nodemailer/node_modules/nodemailer/lib/smtp-connection/index.js:579:20)
    at Timeout._greetingTimeout.setTimeout (/Users/<username>/projects/personal/learning-tests/javascript/nodemailer/node_modules/nodemailer/lib/smtp-connection/index.js:520:22)
    at ontimeout (timers.js:498:11)
    at tryOnTimeout (timers.js:323:5)
    at Timer.listOnTimeout (timers.js:290:5) code: 'ETIMEDOUT', command: 'CONN' }

And some additional info:

  • node version: 8.11.2
  • nodemailer version: 4.6.4
  • operating system: OSX version 10.12.6
like image 696
Derek Hubbard Avatar asked May 23 '18 17:05

Derek Hubbard


People also ask

Does Nodemailer use SMTP?

SMTP is the main transport in Nodemailer for delivering messages. SMTP is also the protocol used between different email hosts, so its truly universal.

How do I debug Nodemailer?

Debugging options in Nodemailer It is simple with Nodemailer: set both debug and logger to true and you will be able to see all the data which is passed to the server as an output in the console. This way, you will be able to analyze the email sending process and quickly fix errors, if there are any.

How can I send email with my company domain using Nodemailer?

In short, what you need to do to send messages, would be the following: Create a Nodemailer transporter using either SMTP or some other transport mechanism. Set up message options (who sends what to whom) Deliver the message object using the sendMail() method of your previously created transporter.

Does Nodemailer work on localhost?

In the localhost its not working because a secure and safetly connection is required for sending an email but using gmail[smtp(simple mail transfer protocol)] we can achieve it functionality. Don't forget to first do the setting - Allow less secure apps to access account. its given permission for access gmail account.


3 Answers

In my case I needed to set the secure key to true on the transporter object and then it worked.

let transporter = nodemailer.createTransport({
        host: "mail.hostname.com",
        port: 465,
        secure: true, // true for 465, false for other ports
        auth: {
            user: '[email protected]', // generated ethereal user
            pass: 'password', // generated ethereal password
        }
    });
like image 151
Diego Borigen Avatar answered Oct 22 '22 06:10

Diego Borigen


In my case, when I have changed port 586 to 587, then it worked.

like image 23
Ankit Kumar Rajpoot Avatar answered Oct 22 '22 07:10

Ankit Kumar Rajpoot


Check your internet connection probably its down . below is an example with Etheral Email with typescript

import * as nodemailer from "nodemailer";

export const sendEmail = async (recipient: string, url: string, linkText: string) => {
  nodemailer.createTestAccount((err, account) => {
    if (err) {
      console.log(err);
    }
    const transporter = nodemailer.createTransport({
      host: account.smtp.host,
      port: account.smtp.port,
      secure: account.smtp.secure,
      auth: {
        user: account.user,
        pass: account.pass
      }
    });

    const message = {
      from: "Sender Name <[email protected]>",
      to: `Recipient <${recipient}>`,
      subject: "Nodemailer is unicode friendly ✔",
      text: "Hello to myself!",
      html: `
        <html>
        <body>
        <p>Testing sparkpost API</p>
        <a href="${url}">${linkText}</a>
        </body>
        </html>`
    };

    transporter.sendMail(message, (err, info) => {
      if (err) {
        console.log("Error occurred. " + err.message);
      }

      console.log("Message sent: %s", info.messageId);
      // Preview only available when sending through an Ethereal account
      console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
    });
  });
};
like image 22
Divine Hycenth Avatar answered Oct 22 '22 06:10

Divine Hycenth