Files
ldap-auth-service/lib/mailer.js
2026-08-26 14:16:14 +05:00

77 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict';
const nodemailer = require('nodemailer');
const config = require('./config');
function ensureConfigured() {
if (!config.emailHost) {
const err = new Error('SMTP не настроен (EMAIL_HOST пуст)');
err.status = 503;
throw err;
}
}
function sendMail({ to, subject, text }) {
ensureConfigured();
const transporter = nodemailer.createTransport({
host: config.emailHost,
port: config.emailPort,
secure: config.emailSecure,
auth: config.emailUser ? { user: config.emailUser, pass: config.emailPassword } : undefined
});
return transporter
.sendMail({
from: config.mailFrom || config.emailUser,
to,
subject,
text
})
.finally(() => transporter.close());
}
function sendVerificationCode(email, code) {
console.log(`[register] код для ${email}: ${code}`);
return sendMail({
to: email,
subject: 'Код подтверждения регистрации',
text: `Ваш код подтверждения регистрации: ${code}\n\nКод действителен 10 минут.`
});
}
function sendApproved(email, { login, password, fio, position, crmUrl, quickLinksUrl, netbios }) {
const positionLine = position ? `\nДолжность: ${position}` : '';
const netbiosName = (netbios || config.domain.split('.')[0]).toLowerCase();
const crmLine = crmUrl ? `\n\nАдрес СРМ (задачник): ${crmUrl}` : '';
const linksLine = quickLinksUrl ? `\nСервис быстрых ссылок: ${quickLinksUrl}` : '';
return sendMail({
to: email,
subject: 'Регистрация одобрена',
text: `Здравствуйте, ${fio}!\n\nВаша заявка на регистрацию одобрена.\n\nВаши данные для входа:\nЛогин: ${login}\nПароль: ${password}${positionLine}\n\nИнструкция по входу в систему:\n• Чтобы зайти под своей учётной записью, на экране входа выберите «Другой пользователь».\n• Логин и пароль едины и для входа на ПК, и для задачника.\n• Если простой логин и пароль не принимаются, введите учётную запись полностью с указанием домена: ${netbiosName}\\${login}\n (пример: ${netbiosName}\\${login})${crmLine}${linksLine}`
});
}
function sendDenied(email, { fio, reason }) {
return sendMail({
to: email,
subject: 'Регистрация отклонена',
text: `Здравствуйте${fio ? ', ' + fio : ''}!\n\nВаша заявка на регистрацию отклонена.\n${reason ? 'Причина: ' + reason + '\n' : ''}\nЕсли вы считаете это ошибкой, обратитесь к администратору.`
});
}
function sendPasswordChangeApproved(email, { fio, login }) {
return sendMail({
to: email,
subject: 'Смена пароля одобрена',
text: `Здравствуйте${fio ? ', ' + fio : ''}!\n\nВаша заявка на смену пароля одобрена.${login ? `\nЛогин: ${login}` : ''}\nНовый пароль и ваши данные (ФИО, телефон, почта, должность) обновлены.\n\nЕсли вы не запрашивали смену пароля, обратитесь к администратору.`
});
}
function sendPasswordChangeDenied(email, { fio, reason }) {
return sendMail({
to: email,
subject: 'Смена пароля отклонена',
text: `Здравствуйте${fio ? ', ' + fio : ''}!\n\nВаша заявка на смену пароля отклонена.\n${reason ? 'Причина: ' + reason + '\n' : ''}\nЕсли вы считаете это ошибкой, обратитесь к администратору.`
});
}
module.exports = { sendVerificationCode, sendApproved, sendDenied, sendPasswordChangeApproved, sendPasswordChangeDenied };