fix: add option to disable STARTTLS for SMTP servers without TLS support (#6770)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
This commit is contained in:
Dharun Ashokkumar 2026-01-20 05:02:06 +05:30 committed by GitHub
parent f8d494a03d
commit b638ae48ef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 38 additions and 3 deletions

View File

@ -1,5 +1,6 @@
const nodemailer = require("nodemailer"); const nodemailer = require("nodemailer");
const NotificationProvider = require("./notification-provider"); const NotificationProvider = require("./notification-provider");
const { log } = require("../../src/util");
class SMTP extends NotificationProvider { class SMTP extends NotificationProvider {
name = "smtp"; name = "smtp";
@ -14,11 +15,25 @@ class SMTP extends NotificationProvider {
host: notification.smtpHost, host: notification.smtpHost,
port: notification.smtpPort, port: notification.smtpPort,
secure: notification.smtpSecure, secure: notification.smtpSecure,
tls: {
rejectUnauthorized: !notification.smtpIgnoreTLSError || false,
},
}; };
// Handle TLS/STARTTLS options
if (!notification.smtpSecure && notification.smtpIgnoreSTARTTLS) {
// Disable STARTTLS completely for servers that don't support it
// Connection will remain unencrypted
log.warn(
"notification",
`SMTP notification using unencrypted connection (STARTTLS disabled) to ${notification.smtpHost}:${notification.smtpPort}`
);
config.ignoreTLS = true;
} else {
// SMTPS (implicit TLS on port 465)
// or STARTTLS (default behavior for ports 25, 587)
config.tls = {
rejectUnauthorized: !notification.smtpIgnoreTLSError || false,
};
}
// Fix #1129 // Fix #1129
if (notification.smtpDkimDomain) { if (notification.smtpDkimDomain) {
config.dkim = { config.dkim = {

View File

@ -56,6 +56,24 @@
</div> </div>
</div> </div>
<div v-if="!$parent.notification.smtpSecure" class="mb-3">
<div class="form-check">
<input
id="ignore-starttls"
v-model="$parent.notification.smtpIgnoreSTARTTLS"
class="form-check-input"
type="checkbox"
value=""
/>
<label class="form-check-label" for="ignore-starttls">
{{ $t("Disable STARTTLS") }}
</label>
</div>
<div class="form-text">
{{ $t("disableSTARTTLSDescription") }}
</div>
</div>
<div class="mb-3"> <div class="mb-3">
<label for="username" class="form-label">{{ $t("Username") }}</label> <label for="username" class="form-label">{{ $t("Username") }}</label>
<input <input

View File

@ -585,6 +585,8 @@
"secureOptionNone": "None / STARTTLS (25, 587)", "secureOptionNone": "None / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)", "secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Ignore TLS Error", "Ignore TLS Error": "Ignore TLS Error",
"Disable STARTTLS": "Disable STARTTLS",
"disableSTARTTLSDescription": "Enable this option for SMTP servers that do not support STARTTLS. This will send emails over an unencrypted connection.",
"From Email": "From Email", "From Email": "From Email",
"emailCustomisableContent": "Customisable content", "emailCustomisableContent": "Customisable content",
"smtpLiquidIntroduction": "The following two fields are templatable via the Liquid templating Language. Please refer to the {0} for usage instructions. These are the available variables:", "smtpLiquidIntroduction": "The following two fields are templatable via the Liquid templating Language. Please refer to the {0} for usage instructions. These are the available variables:",