php 8.6 不内置 smtp 端口配置,端口由邮件类库(如 phpmailer)决定;使用 phpmailer 时需启用 openssl、设 smtpsecure='ssl'、port=465,禁用错误 host 格式与调试模式。

PHP 8.6 本身不内置 SMTP 端口配置,端口设置取决于你使用的邮件发送方式——关键在于所选的邮件类库(如 PHPMailer)或自定义 SMTP 封装,而非 PHP 版本直接控制端口。
使用 PHPMailer 设置 465 端口(推荐)
PHPMailer 是当前最主流、兼容 PHP 8.6 的方案,支持 SSL 加密和明确端口指定:
-
必须启用 OpenSSL 扩展:确认 php.ini 中已开启
extension=openssl,且未被注释;重启 Web 服务(如 Apache/Nginx) - SMTPSecure 设为 "ssl":465 端口强制走 SSL,不能设为 tls 或空值
-
Port 显式设为 465:即使 SMTPSecure=ssl,也建议显式写
$mail->Port = 465; -
Host 地址需带协议前缀?不需要:写
$mail->Host = 'smtp.qq.com';即可,不要写成ssl://smtp.qq.com—— PHPMailer 内部会根据 SMTPSecure 和 Port 自动处理底层连接
常见错误配置(导致“can not connect”)
以下写法在 PHP 8.6 下极易失败,需避免:
- 把
Host写成ssl://smtp.qq.com或tls://smtp.163.com—— PHPMailer 不识别这种 URL 格式,会解析失败 -
SMTPSecure = 'tls'却配Port = 465—— TLS 和 SSL 是不同加密握手机制,465 只对应 SSL,587 才对应 TLS - 用老旧的
Smtp.class.php(如手动 require 的非 Composer 类)—— 它通常不兼容 PHP 8.6 的严格类型和废弃函数(如split(),create_function()) - 没关掉调试模式就上线:
$mail->SMTPDebug = 0;上线前务必关闭,否则可能暴露敏感信息
QQ/163/企业邮箱实际配置示例
以 QQ 邮箱为例(需开通 SMTP 并获取授权码):
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.qq.com';
$mail->SMTPAuth = true;
$mail->Username = 'your@qq.com';
$mail->Password = 'your_app_specific_authorization_code'; // 不是登录密码
$mail->SMTPSecure = 'ssl'; // 关键:匹配 465
$mail->Port = 465; // 关键:显式声明
$mail->setFrom('your@qq.com', '网站名称');
$mail->addAddress('to@example.com');
$mail->isHTML(true);
$mail->Subject = '测试';
$mail->Body = '<h2>你好</h2>';
163 邮箱同理,Host 改为 smtp.163.com,同样用 SSL + 465,用户名填邮箱前缀(如 username 而非 username@163.com)
不建议继续用 mail() 函数配 465
PHP 原生 mail() 函数无法指定 SMTP 端口或加密方式,它依赖服务器本地 MTA(如 sendmail/postfix),而这些服务默认不监听 465,也不处理 SSL 握手。强行想让 mail() 走 465,本质是要重配整个系统 MTA,复杂度远超直接换 PHPMailer。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











