SMTP连接失败(权限被拒13):线上服务器PHPMailer配置异常求助
解决SMTP连接权限被拒绝(13)的问题
出现SMTP错误:无法连接到服务器:权限被拒绝(13),SMTP connect()失败,且本地运行正常、仅线上带SSL证书的服务器出错,大概率是服务器系统层面的限制,而非代码配置问题,按以下步骤排查:
排查方向
- 防火墙/安全组限制:线上服务器的防火墙或云服务商安全组可能禁止了出站465端口(SSL SMTP端口)。检查服务器防火墙规则,确保允许向
smtps.aruba.it的465端口发起连接。 - Linux安全模块限制:如果是Linux服务器,SELinux或AppArmor可能阻止PHP进程发起外部网络连接。可以临时关闭SELinux测试:
测试正常后,再添加永久规则允许PHP访问SMTP端口,或联系服务器管理员配置。setenforce 0 - 主机商邮件限制:部分主机服务商为反垃圾邮件,会禁止使用外部SMTP服务器,强制要求使用自身提供的邮件服务。直接联系主机商确认是否有此限制。
- SSL证书信任问题:线上服务器可能不信任
smtps.aruba.it的SSL证书,导致连接被拦截。可临时添加以下代码跳过证书验证(仅测试用,生产环境不推荐):$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );
代码优化建议
- 提高SMTP调试级别,获取更详细的错误日志:将
$mail->SMTPDebug = 1;改为$mail->SMTPDebug = 3;,能看到连接过程中的具体细节,帮助定位问题。 - 启用异常捕获,方便获取精准错误信息:实例化PHPMailer时传入
true开启异常处理,捕获发送过程中的错误。
修改后的示例代码:
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; require 'vendor/autoload.php'; $mail = new PHPMailer(true); // 启用异常处理 try { $mail->SMTPDebug = 3; $mail->isSMTP(); $mail->Host = 'smtps.aruba.it'; $mail->SMTPAuth = true; $mail->Username = 'mail@domain.com'; $mail->Password = '********'; $mail->SMTPSecure = 'ssl'; $mail->Port = 465; // 临时测试用:跳过SSL证书验证(生产环境移除) $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); // 生成OTP验证码 $randOtp = strval(rand(10000, 99999)); $sender = "mail@domain.com"; $receiver = $_SESSION['receiver']; $subject = "Codice di sicurezza OTP"; $mailBody = $randOtp . " Questo e' il tuo codice di sicurezza!"; $mail->setFrom($sender); $mail->addAddress($receiver); $mail->addReplyTo($sender); $mail->isHTML(true); $mail->Subject = $subject; $mail->Body = $mailBody; $mail->send(); echo "Email inviata con successo"; } catch (Exception $e) { echo "Errore nell invio dell email: {$mail->ErrorInfo}"; } ?>
内容的提问来源于stack exchange,提问作者user19593694
相关产品推荐
相关产品推荐

