Почему не работает nodemailer?
Можно ещё таким способом отправлять:
(Пример отправки кода подтверждения)
const nodemailer = require('nodemailer');
const directTransport = require('nodemailer-direct-transport');
const fromHost = `mysite.com`;
const from = 'site' + '@' + "gmail.com";

console.log('Email will be sent from:');
console.log(from, '\n');

// Ask for email address
const to = prompt('Enter your email address ').trim();

// Генерируем код
const trueVerificationCode = Math.round(Math.random() * (10e5 - 1)).toString();

const transport = nodemailer.createTransport(directTransport({
  name: fromHost
}));
let y = trueVerificationCode;
// Отправляем письмо
transport.sendMail({
  from, to,
  subject: 'Verify your email address',
  html: `
         <div style="width:100%;display:flex;flex-direction:column;justify-content:center;
         align-items:center;background:lightblue;padding:50px;box-sizing:border-box;">
         <h1>Verify your email address</h1>
         <p>Site has tried to verify your email address "${to}".
         If this wasn't you, ignore and delete this email. Otherwise, the verification code is bellow:</p>
         <div style="padding:50px;background:lightgray;border-radius:10px;font-size:30px;
         font-family:monospace;">${trueVerificationCode}</div></div>
        `
}, (err, data) => {
  if (err) {
    console.error('There was an error:', err);
  } else {
    console.log('\nVerification email sent, check your inbox\n');
    const userVerificationCode = prompt('Enter your verification code ');
    if (userVerificationCode == trueVerificationCode) {
      console.log('Email address verified');
    } else {
      console.log('Code incorrect');
    }
  }
});
Код по этой ссылке  и не будет работать, код там не полный, это вершина айсберга, он возможно работал - раньше, сейчас если я не ошибаюсь то вся эта тема с nodemailer идёт через гугл, а в гугле куча мозготрёпки. Недавно я возился с этим nodemailer, пол дня ушло на то что бы настроить рассылку сообщение, могу лишь дать подсказку о том как делал я: 

Я nodemailer юзал в связке с googleapis
Нужно как минимим регаться будет в гугле, создать там приложение для рассылки, связать 2 пакета nodemailer и googleapis на бэке, прокинуть в них нужны данные, например clientId - при создании приложения для рассылок - этот айдишник выдает приложение, так же где-то там взять client_secret и ещё возможно какие-то манипуляции о которых я даже и сам не помню, хотя недавно делал,  в итоге должно быть что-то типа этого.

const nodemailer = require("nodemailer");
const { google } = require("googleapis");
const OAuth2 = google.auth.OAuth2;
const OAuth2_client = new OAuth2(clientId, client_secret);
OAuth2_client.setCredentials({ refresh_token: refresGoogleToken });

class MailService {
  static async sendActivationMail(to, activationLink) {
    const accessToken = await OAuth2_client.getAccessToken();

    const transporter = nodemailer.createTransport({
      service: "gmail",
      secure: false,
      auth: {
        type: "OAuth2",
        user: email,
        clientId: clientId,
        clientSecret: client_secret,
        refreshToken: refresGoogleToken,
        accessToken: accessToken, 
      },
      tls: {
        rejectUnauthorized: false,
      },
    });

    await transporter.sendMail({
      from: email,
      to,
     // и тут ниже остальная логика по созданию содержимого сообщения для почты, тут ничего ниже особенного нет