Вопрос или проблема
Я использую 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:
- Перейдите на Azure Portal.
- Создайте новое приложение, выбрав "App registrations".
- Запомните "Application (client) ID" и "Directory (tenant) ID".
- Создайте новый "Client Secret", который вам понадобится.
1.2. Настройка разрешений:
- В разделе "API permissions" добавьте разрешение
Mail.Send
в Microsoft Graph API. - Не забудьте "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 аккаунт с включенной многофакторной аутентификацией. Если у вас есть дополнительные вопросы или возникли трудности, не стесняйтесь обращаться за помощью.