You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SMTP连接失败(权限被拒13):线上服务器PHPMailer配置异常求助

解决SMTP连接权限被拒绝(13)的问题

出现SMTP错误:无法连接到服务器:权限被拒绝(13),SMTP connect()失败,且本地运行正常、仅线上带SSL证书的服务器出错,大概率是服务器系统层面的限制,而非代码配置问题,按以下步骤排查:

排查方向

  • 防火墙/安全组限制:线上服务器的防火墙或云服务商安全组可能禁止了出站465端口(SSL SMTP端口)。检查服务器防火墙规则,确保允许向smtps.aruba.it的465端口发起连接。
  • Linux安全模块限制:如果是Linux服务器,SELinux或AppArmor可能阻止PHP进程发起外部网络连接。可以临时关闭SELinux测试:
    setenforce 0
    
    测试正常后,再添加永久规则允许PHP访问SMTP端口,或联系服务器管理员配置。
  • 主机商邮件限制:部分主机服务商为反垃圾邮件,会禁止使用外部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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:55:20