diff --git a/config.js b/config.js index 7ad710b..047abb0 100644 --- a/config.js +++ b/config.js @@ -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' " }; diff --git a/core/notifier.js b/core/notifier.js index 8b21440..30f4060 100644 --- a/core/notifier.js +++ b/core/notifier.js @@ -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, diff --git a/core/utils.js b/core/utils.js index e8d5b9b..13d309a 100644 --- a/core/utils.js +++ b/core/utils.js @@ -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); } diff --git a/models/obj_config.js b/models/obj_config.js index 44c0848..c10b0c1 100644 --- a/models/obj_config.js +++ b/models/obj_config.js @@ -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,