Bug: SMTP TLS encryption forces ssl:// connection on port 587 (STARTTLS broken)
Description When selecting TLS as the SMTP encryption method in Admin > Advanced Parameters > E-mail, QloApps incorrectly forces a direct SSL connection (ssl://) instead of using STARTTLS. This causes the connection to fail on port 587 with errors like:
- "wrong version number"
- "SSL routines: wrong version number"
Root Cause
In classes/Mail.php, the $isTls variable is set to true for ANY encryption
that is not "off" — including "tls". However, in Symfony Mailer's EsmtpTransport,
passing true for $tls forces a direct SSL/SMTPS connection (ssl://),
which is only correct for port 465.
For port 587 with STARTTLS, $isTls must be false so EsmtpTransport
starts an unencrypted connection and upgrades it via STARTTLS automatically.
Affected code (classes/Mail.php ~line 145 and ~line 504):
// CURRENT (BUGGY) CODE:
if (!isset($configuration['PS_MAIL_SMTP_ENCRYPTION'])
|| Tools::strtolower($configuration['PS_MAIL_SMTP_ENCRYPTION']) === 'off'
) {
$isTls = false;
} else {
$isTls = true; // ← This incorrectly forces ssl:// for TLS/STARTTLS
}
**Fix :**
// CORRECT CODE:
if (isset($configuration['PS_MAIL_SMTP_ENCRYPTION'])
&& Tools::strtolower($configuration['PS_MAIL_SMTP_ENCRYPTION']) === 'ssl'
) {
$isTls = true; // Direct SSL — correct for port 465
} else {
$isTls = false; // STARTTLS — correct for port 587
}Source: Qloapps/QloApps