nodemailer не работает await на transporter.verify()

Имеется код:

router.post(
  '/register',
  [
    check('email', 'Некорректный email').isEmail(),
    check('password', 'Минимальная длина пароля 6 символов').isLength({ min: 6 }),
    check('name', 'Введите имя').exists(),
    check('surname', 'Введите фамилию').exists(),
    check('middle_name', 'Введите отчество').exists(),
    check('email_password', 'Введите пароль от почты').exists()
  ],
  async (req, res) => {
  try {
    const errors = validationResult(req)

    if (!errors.isEmpty()) {
      return res.status(400).json({
        errors: errors.array(),
        message: 'Некорректные данные при регистрации'
      })
    }

    let {email, password, name, surname, middle_name, email_password, email_aggregator} = req.body
    email = email.toLowerCase()

    const data_email_aggregator = await getEmailAggregator(email_aggregator)
    if(!data_email_aggregator){
      return res.status(400).json({ message: 'Выберите почтового агрегатора из списка доступных' })
    }

    const candidate = await User.findOne({ email })

    if (candidate) {
      return res.status(400).json({ message: 'Такой пользователь уже существует' })
    }
    
    let transporter = await nodemailer.createTransport({
      pool: true,
      host: data_email_aggregator.smtp,
      port: data_email_aggregator.port,
      secure: true, // use TLS
      auth: {
        user: email,
        pass: email_password
      },
    });

    await transporter.verify((error, success) => {
      if (error) {
        return res.status(400).json({ message: 'Почта или пароль от почты введены неверно' })
      }
    })

    const hashedPassword = await bcrypt.hash(password, 12)
    const cryptEmailPassword = await CryptoJS.AES.encrypt(email_password, config.cryptoJS.secret).toString();

    const user = new User({ email: email, password: hashedPassword, name, surname, middle_name, email_password: cryptEmailPassword, email_aggregator: email_aggregator })


    await user.save()

    res.status(201).json({ message: 'Пользователь успешно создан' })

  } catch (e) {
    res.status(500).json({ message: 'Что-то пошло не так, попробуйте снова' })
  }
})

Проблема в этом кусочке кода

    await transporter.verify((error, success) => {
      if (error) {
        return res.status(400).json({ message: 'Почта или пароль от почты введены неверно' })
      }
    })

Код просто пролетает, как будто его и нет тут вовсе. Пробовал явно создавать функцию на проверку verify. Обёртывал в new Promise(), но по истечении 60 секунд вылетала ошибка таймаута. В примере выше, даже если данные от аккаунта введены неправильно -- пользователь добавляется в базу.

Однако, если я запускаю test.js со следующим кодом:

const nodemailer = require('nodemailer'); //to send mails



let transporter = nodemailer.createTransport({
    pool: true,
    host: "smtp.gmail.com",
    port: 465,
    secure: true, // use TLS
    auth: {
        user: "Моя почта",
        pass: "Неправильный пароль"
    },
});

transporter.verify(function (error, success) {
    if (error) {
        console.log(error);
    } else {
        console.log(success);
    }
});

То код с задержкой в секунду-две выдаёт ошибку


Ответы (1 шт):

Автор решения: Vladislav Sokolov

Извращённо получилось, но лучшего выхода не нашёл. Код, который был ниже verify засунул в if(errors){}else{}

    transporter.verify(async (error, success) => {
      if (success) {
        const hashedPassword = await bcrypt.hash(password, 12)
        const cryptEmailPassword = await CryptoJS.AES.encrypt(email_password, config.cryptoJS.secret).toString();

        const user = new User({ email: email, password: hashedPassword, name, surname, middle_name, email_password: cryptEmailPassword, email_aggregator: email_aggregator })

        await user.save()

        res.status(201).json({ message: 'Пользователь успешно создан' })
      }else{
        return res.status(400).json({ message: 'Почта или пароль от почты введены неверно' })
      }
    })

→ Ссылка