Ошибка входа в nodemailer с Microsoft Live Mail: 535 5.7.139 Аутентификация не удалась, базовая аутентификация отключена

Вопрос или проблема

Я использую nodemailer для отправки писем с аккаунта электронной почты Microsoft [email protected]. Я включил MFA в своем аккаунте Microsoft и создал пароль приложения для использования его в nodemailer.

Все работало нормально до трех дней назад. Я обнаружил ошибку Неверный логин: 535 5.7.139 Аутентификация не удалась, базовая аутентификация отключена. [BN9PR03CA0655.namprd03.prod.outlook.com 2024-09-20T00:31:14.186Z 08DCD82D4D9A014B].

Разве nodemailer сейчас нельзя использовать для электронной почты Microsoft?

Ответ или решение

Проблема, с которой вы столкнулись, связана с изменениями в политике аутентификации Microsoft, особенно при использовании многофакторной аутентификации (MFA) и отключении базовой аутентификации. Давайте разберем, как решить эту проблему и продолжить использовать Nodemailer для отправки почты с помощью вашего аккаунта Microsoft.

Шаг 1: Использование OAuth2 для аутентификации

Microsoft отключил базовую аутентификацию для многих из своих сервисов, и рекомендуется использовать OAuth2 для клиентов, работающих с их API. Вам необходимо создать приложение в Azure Active Directory и получить токены аутентификации.

1.1. Создание приложения в Azure:

  1. Перейдите на Azure Portal.
  2. Создайте новое приложение, выбрав "App registrations".
  3. Запомните "Application (client) ID" и "Directory (tenant) ID".
  4. Создайте новый "Client Secret", который вам понадобится.

1.2. Настройка разрешений:

  1. В разделе "API permissions" добавьте разрешение Mail.Send в Microsoft Graph API.
  2. Не забудьте "Grant admin consent" для предоставления разрешений.

Шаг 2: Получение токена OAuth2

Для использования Nodemailer с OAuth2, вам нужно получить токен. Вы можете использовать библиотеку google-auth-library или любой другой инструмент для OAuth2.

const { google } = require('googleapis');

const oAuth2Client = new google.auth.OAuth2(
  YOUR_CLIENT_ID,
  YOUR_CLIENT_SECRET,
  YOUR_REDIRECT_URL
);

oAuth2Client.setCredentials({ refresh_token: YOUR_REFRESH_TOKEN });

async function sendMail() {
  try {
    const accessToken = await oAuth2Client.getAccessToken();
    // Теперь вы можете использовать accessToken для Nodemailer
  } catch (error) {
    console.error('Ошибка при получении токена', error);
  }
}

Шаг 3: Настройка Nodemailer

Теперь, когда у вас есть токен доступа, вы можете использовать его в Nodemailer для отправки писем.

const nodemailer = require('nodemailer');

async function sendEmail() {
  const transport = nodemailer.createTransport({
    service: 'hotmail',
    auth: {
      type: 'OAuth2',
      user: '[email protected]', // Ваш email
      clientId: YOUR_CLIENT_ID,
      clientSecret: YOUR_CLIENT_SECRET,
      refreshToken: YOUR_REFRESH_TOKEN,
      accessToken: accessToken,
    },
  });

  const mailOptions = {
    from: '[email protected]',
    to: '[email protected]', // Получатель
    subject: 'Тестовое письмо',
    text: 'Привет! Это тестовое сообщение!',
  };

  try {
    const result = await transport.sendMail(mailOptions);
    console.log('Письмо отправлено: ', result);
  } catch (error) {
    console.error('Ошибка при отправке письма', error);
  }
}

sendEmail();

Заключение

После выполнения указанных шагов вы сможете отправлять письма с помощью Nodemailer, используя ваш Microsoft аккаунт с включенной многофакторной аутентификацией. Если у вас есть дополнительные вопросы или возникли трудности, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...