Files
ldap-auth-service/lib/mailer.js
2026-09-01 11:00:13 +05:00

82 lines
4.9 KiB
JavaScript
Raw Permalink 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, codeNumber) {
console.log(`[register] код №${codeNumber} для ${email}: ${code}`);
return sendMail({
to: email,
subject: `Код подтверждения №${codeNumber}`,
text: `Ваш код подтверждения №${codeNumber}: ${code}\n\nКод действителен 10 минут.`
});
}
function sendApproved(email, { login, password, fio, position, crmUrl, quickLinksUrl, domain }) {
const positionLine = position ? `\nДолжность: ${position}` : '';
const domainName = (domain || config.domain).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• Если простой логин и пароль не принимаются, введите учётную запись полностью с указанием домена: ${domainName}\\${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, crmUrl, quickLinksUrl, domain }) {
const domainName = (domain || config.domain).toLowerCase();
const crmLine = crmUrl ? `\n\nАдрес СРМ (задачник): ${crmUrl}` : '';
const linksLine = quickLinksUrl ? `\nСервис быстрых ссылок: ${quickLinksUrl}` : '';
const loginLine = login ? `\nЛогин: ${login}` : '';
const domainLine = login ? `\n• Если простой логин и пароль не принимаются, введите учётную запись полностью с указанием домена: ${domainName}\\${login}` : '';
return sendMail({
to: email,
subject: 'Смена пароля одобрена',
text: `Здравствуйте${fio ? ', ' + fio : ''}!\n\nВаша заявка на смену пароля одобрена.${loginLine}\nНовый пароль и ваши данные (ФИО, телефон, почта, должность) обновлены.\n\nИнструкция по входу в систему:\n• Чтобы зайти под своей учётной записью, на экране входа выберите «Другой пользователь».\n• Логин и пароль едины и для входа на ПК, и для задачника.${domainLine}${crmLine}${linksLine}\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 };