diff --git a/client/src/Pages/Settings/SettingsEmail.jsx b/client/src/Pages/Settings/SettingsEmail.jsx index 7d6538734..113d5bf44 100644 --- a/client/src/Pages/Settings/SettingsEmail.jsx +++ b/client/src/Pages/Settings/SettingsEmail.jsx @@ -50,6 +50,8 @@ const SettingsEmail = ({ const emailConfig = { systemEmailHost: settingsData?.settings?.systemEmailHost, systemEmailPort: settingsData?.settings?.systemEmailPort, + systemEmailSecure: settingsData?.settings?.systemEmailSecure, + systemEmailPool: settingsData?.settings?.systemEmailPool, systemEmailUser: settingsData?.settings?.systemEmailUser, systemEmailAddress: settingsData?.settings?.systemEmailAddress, systemEmailPassword: password || settingsData?.settings?.systemEmailPassword, @@ -110,6 +112,27 @@ const SettingsEmail = ({ onChange={handleChange} /> + + {t("settingsEmailSecure")} + + {t("settingsEmailPool")} + + {t("settingsEmailUser")} { if ( name === "systemEmailIgnoreTLS" || name === "systemEmailRequireTLS" || - name === "systemEmailRejectUnauthorized" + name === "systemEmailRejectUnauthorized" || + name === "systemEmailSecure" || + name === "systemEmailPool" ) { newValue = checked; } diff --git a/client/src/Utils/NetworkService.js b/client/src/Utils/NetworkService.js index 3d124a3e6..dcb21df92 100644 --- a/client/src/Utils/NetworkService.js +++ b/client/src/Utils/NetworkService.js @@ -1014,6 +1014,12 @@ class NetworkService { systemEmailPort: emailConfig.systemEmailPort, systemEmailAddress: emailConfig.systemEmailAddress, systemEmailPassword: emailConfig.systemEmailPassword, + systemEmailSecure: emailConfig.systemEmailSecure, + systemEmailPool: emailConfig.systemEmailPool, + systemEmailIgnoreTLS: emailConfig.systemEmailIgnoreTLS, + systemEmailRequireTLS: emailConfig.systemEmailRequireTLS, + systemEmailRejectUnauthorized: emailConfig.systemEmailRejectUnauthorized, + systemEmailTLSServername: emailConfig.systemEmailTLSServername, // Only include these if they are present ...(emailConfig.systemEmailConnectionHost && { systemEmailConnectionHost: emailConfig.systemEmailConnectionHost, diff --git a/client/src/Validation/validation.js b/client/src/Validation/validation.js index cb2d4e797..089722a8d 100644 --- a/client/src/Validation/validation.js +++ b/client/src/Validation/validation.js @@ -290,6 +290,8 @@ const settingsValidation = joi.object({ timezone: joi.string().allow("").optional(), systemEmailHost: joi.string().allow(""), systemEmailPort: joi.number().allow(null, ""), + systemEmailSecure: joi.boolean().optional(), + systemEmailPool: joi.boolean().optional(), systemEmailAddress: joi.string().allow(""), systemEmailPassword: joi.string().allow(""), systemEmailUser: joi.string().allow(""), diff --git a/client/src/locales/en.json b/client/src/locales/en.json index 028f9483c..610c56d0e 100644 --- a/client/src/locales/en.json +++ b/client/src/locales/en.json @@ -683,6 +683,8 @@ "settingsEmailIgnoreTLS": "Ignore TLS", "settingsEmailRequireTLS": "Require TLS", "settingsEmailRejectUnauthorized": "Reject Unauthorized", + "settingsEmailSecure": "Secure", + "settingsEmailPool": "Pool", "state": "State", "statusBreadCrumbsStatusPages": "Status Pages", "statusBreadCrumbsDetails": "Details", diff --git a/server/controllers/settingsController.js b/server/controllers/settingsController.js index 58e8ce9f4..d1010c093 100755 --- a/server/controllers/settingsController.js +++ b/server/controllers/settingsController.js @@ -74,6 +74,12 @@ class SettingsController { systemEmailPassword, systemEmailUser, systemEmailConnectionHost, + systemEmailSecure, + systemEmailPool, + systemEmailIgnoreTLS, + systemEmailRequireTLS, + systemEmailRejectUnauthorized, + systemEmailTLSServername, } = req.body; const subject = this.stringService.testEmailSubject; @@ -91,6 +97,12 @@ class SettingsController { systemEmailAddress, systemEmailPassword, systemEmailConnectionHost, + systemEmailSecure, + systemEmailPool, + systemEmailIgnoreTLS, + systemEmailRequireTLS, + systemEmailRejectUnauthorized, + systemEmailTLSServername, } ); diff --git a/server/service/emailService.js b/server/service/emailService.js index 3b627fb95..325871fac 100755 --- a/server/service/emailService.js +++ b/server/service/emailService.js @@ -101,6 +101,8 @@ class EmailService { const { systemEmailHost, systemEmailPort, + systemEmailSecure, + systemEmailPool, systemEmailUser, systemEmailAddress, systemEmailPassword, @@ -111,32 +113,23 @@ class EmailService { systemEmailRejectUnauthorized, } = config; - const baseEmailConfig = { + const emailConfig = { host: systemEmailHost, port: Number(systemEmailPort), - secure: true, + secure: systemEmailSecure, auth: { user: systemEmailUser || systemEmailAddress, pass: systemEmailPassword, }, connectionTimeout: 5000, + pool: systemEmailPool, + tls: { rejectUnauthorized: systemEmailRejectUnauthorized }, + ignoreTLS: systemEmailIgnoreTLS, + requireTLS: systemEmailRequireTLS, + servername: systemEmailTLSServername, + name: systemEmailConnectionHost || "localhost", }; - const isSmtps = Number(systemEmailPort) === 465; - - const emailConfig = !isSmtps - ? { - ...baseEmailConfig, - name: systemEmailConnectionHost || "localhost", - secure: false, - pool: true, - tls: { rejectUnauthorized: systemEmailRejectUnauthorized }, - ignoreTLS: systemEmailIgnoreTLS, - requireTLS: systemEmailRequireTLS, - servername: systemEmailTLSServername, - } - : baseEmailConfig; - this.transporter = this.nodemailer.createTransport(emailConfig); const buildHtml = async (template, context) => { diff --git a/server/validation/joi.js b/server/validation/joi.js index 271cd2d21..b7858f92d 100755 --- a/server/validation/joi.js +++ b/server/validation/joi.js @@ -617,10 +617,16 @@ const sendTestEmailBodyValidation = joi.object({ to: joi.string().required(), systemEmailHost: joi.string(), systemEmailPort: joi.number(), + systemEmailSecure: joi.boolean(), + systemEmailPool: joi.boolean(), systemEmailAddress: joi.string(), systemEmailPassword: joi.string(), systemEmailUser: joi.string(), systemEmailConnectionHost: joi.string(), + systemEmailIgnoreTLS: joi.boolean(), + systemEmailRequireTLS: joi.boolean(), + systemEmailRejectUnauthorized: joi.boolean(), + systemEmailTLSServername: joi.string(), }); export {