TYPO3从8升级至11后SMTP的TLS配置失效求助
将TYPO3从8版本升级到11版本后,安装工具中的SMTP配置无法正常工作。原TYPO3 8中的SMTP配置可以正常发送邮件,但升级后多种配置尝试均失败。
TYPO3 8中正常工作的配置
'MAIL' => [ 'transport' => 'smtp', 'transport_sendmail_command' => '', 'transport_smtp_encrypt' => 'tls', 'transport_smtp_password' => 'xyz my password', 'transport_smtp_server' => 'mymailserver.de:465', 'transport_smtp_username' => 'user', ],
升级后尝试的无效配置
尝试1:设置transport_smtp_encrypt为false
'MAIL' => [ 'transport' => 'smtp', 'transport_sendmail_command' => '', 'transport_smtp_encrypt' => false, 'transport_smtp_password' => 'xyz my password', 'transport_smtp_server' => 'mymailserver.de:465', 'transport_smtp_username' => 'user', ],
尝试2:重复设置transport_smtp_encrypt为false
'MAIL' => [ 'transport' => 'smtp', 'transport_sendmail_command' => '', 'transport_smtp_encrypt' => false, 'transport_smtp_password' => 'xyz my password', 'transport_smtp_server' => 'mymailserver.de:465', 'transport_smtp_username' => 'user', ],
尝试3:设置transport_smtp_encrypt为空字符串
'MAIL' => [ 'transport' => 'smtp', 'transport_sendmail_command' => '', 'transport_smtp_encrypt' => '', 'transport_smtp_password' => 'xyz my password', 'transport_smtp_server' => 'mymailserver.de:465', 'transport_smtp_username' => 'user', ],
错误提示
每次配置后都会收到如下错误:
无法发送邮件,请验证$GLOBALS['TYPO3_CONF_VARS']['MAIL'][*]配置是否有效。错误信息:无法与主机"ssl://mymailserver.de:465"建立连接:stream_socket_client():SSL操作失败,错误码1。OpenSSL错误信息:error:1408F10B:SSL routines:ssl3_get_record:wrong version number
错误中的error:1408F10B表明TLS配置未正确生效,而SMTP服务器仅支持TLS连接。服务器地址、端口、用户名和密码均与TYPO3 8中一致,仅transport_smtp_encrypt参数因版本变更改为接受布尔值true/false或空值。
问题原因与解决方案
核心原因
TYPO3 10+版本中,transport_smtp_encrypt参数的逻辑发生了明确变化:
true:直接使用SSL加密(对应端口465,连接建立阶段就启用SSL)false:使用STARTTLS加密(对应端口587,先建立明文连接再升级为TLS)
你的SMTP服务器使用端口465,但配置中transport_smtp_encrypt=false会触发STARTTLS逻辑,导致在465端口尝试明文连接后升级TLS,与服务器的直接SSL连接要求不匹配,从而出现版本不兼容的错误。
正确配置方案
方案1:适配端口465的SSL连接
将transport_smtp_encrypt设置为true,保持端口465不变:
'MAIL' => [ 'transport' => 'smtp', 'transport_sendmail_command' => '', 'transport_smtp_encrypt' => true, 'transport_smtp_password' => 'xyz my password', 'transport_smtp_server' => 'mymailserver.de:465', 'transport_smtp_username' => 'user', ],
方案2:改用STARTTLS模式(若服务器支持)
将端口改为587,设置transport_smtp_encrypt=false:
'MAIL' => [ 'transport' => 'smtp', 'transport_sendmail_command' => '', 'transport_smtp_encrypt' => false, 'transport_smtp_password' => 'xyz my password', 'transport_smtp_server' => 'mymailserver.de:587', 'transport_smtp_username' => 'user', ],
关键逻辑对应
- 端口465(SMTPS):需要直接建立SSL连接 → 对应
transport_smtp_encrypt=true - 端口587(SMTP+STARTTLS):先明文再升级TLS → 对应
transport_smtp_encrypt=false
内容的提问来源于stack exchange,提问作者lisardo

