Merge pull request #7 from Dollerino/master

ЦИТК-758, ЦИТК-43 - Разрешение работы с SMTP без TLS и аутентификации, проверка корректности при формировании URL
This commit is contained in:
Mikhail Chechnev 2023-12-15 14:15:13 +03:00 committed by GitHub
commit bebe5d3b88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 8 deletions

View File

@ -77,10 +77,14 @@ let mail = {
sHost: "smtp.mail.ru",
//Порт сервера SMTP
nPort: 465,
//Использовать безопасное соединение SMTP (true - использование TLS/SSL, false - использование только в случае наличия STARTTLS)
bSecure: true,
//Имя пользователя SMTP-сервера
sUser: "appserver@citk-parus.ru",
//Пароль пользователя SMTP-сервера
sPass: "",
//Отображать ошибку о некорректном сертификате при проверке безопасности
bRejectUnauthorized: true,
//Наименование отправителя для исходящих сообщений
sFrom: "'Сервис интеграции с WEB-API' <appserver@citk-parus.ru>"
};

View File

@ -113,7 +113,7 @@ class Notifier extends EventEmitter {
if (!message.bSent) {
try {
//Если всё в порядке с настройками
if (this.mail.sHost && this.mail.nPort && this.mail.sUser && this.mail.sPass && this.mail.sFrom) {
if (this.mail.sHost && this.mail.nPort && this.mail.sFrom && this.mail.hasOwnProperty('bSecure') && this.mail.hasOwnProperty('bRejectUnauthorized')) {
//Отправляем
await sendMail({
mail: this.mail,

View File

@ -182,16 +182,24 @@ const sendMail = prms => {
);
//Если структура объекта в норме
if (!sCheckResult) {
//Параметры подключения к SMTP-серверу
let transporter = nodemailer.createTransport({
//Формируем параметры для подключения к SMTP
let transpOptions = {
host: prms.mail.sHost,
port: prms.mail.nPort,
secure: prms.mail.nPort == 465,
auth: {
secure: prms.mail.bSecure,
tls: {
rejectUnauthorized: prms.mail.bRejectUnauthorized
}
};
//Если есть информация о пользователе - добавляем
if (prms.mail.sUser) {
transpOptions.auth = {
user: prms.mail.sUser,
pass: prms.mail.sPass
}
});
}
//Настраиваем подключение к SMTP-серверу
let transporter = nodemailer.createTransport(transpOptions);
//Параметры отправляемого сообщения
let mailOptions = {
from: prms.mail.sFrom,
@ -230,8 +238,8 @@ const buildURL = prms => {
let sCheckResult = validateObject(prms, prmsUtilsSchema.buildURL, "Параметры функции формирования URL");
//Если структура объекта в норме
if (!sCheckResult) {
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! КОНТРОЛЬ КОРРЕКТНОСТИ
return `${prms.sSrvRoot}/${prms.sFnURL}${prms.sQuery ? `?${prms.sQuery}` : ""}`;
//Формируем URL с учетом лишних "/"
return `${prms.sSrvRoot.replace(/\/+$/, '')}/${prms.sFnURL.replace(/^\/+/, '')}${prms.sQuery ? `?${prms.sQuery}` : ""}`;
} else {
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
}

View File

@ -356,6 +356,15 @@ const mail = new Schema({
required: path => `Не указан порт сервера SMTP (${path})`
}
},
//Использовать безопасное соединение STMP
bSecure: {
type: Boolean,
required: false,
message: {
type: path => `Использование безопасного соединения SMTP (${path}) имеет некорректный тип данных (ожидалось - Boolean)`,
required: path => `Не указано использование безопасного соединения SMTP (${path})`
}
},
//Имя пользователя SMTP-сервера
sUser: {
type: String,
@ -375,6 +384,15 @@ const mail = new Schema({
required: path => `Не указан пароль пользователя SMTP-сервера (${path})`
}
},
//Отображать ошибку о некорректном сертификате при проверке безопасности
bRejectUnauthorized: {
type: Boolean,
required: false,
message: {
type: path => `Отображение ошибки о некорректном сертификате SMTP (${path}) имеет некорректный тип данных (ожидалось - Boolean)`,
required: path => `Не указано отображение ошибки о некорректном сертификате (${path})`
}
},
//Наименование отправителя для исходящих сообщений
sFrom: {
type: String,