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

CodeIgniter 4迁移至VPS后SMTP发送邮件失败问题求助

CodeIgniter 4迁移至VPS后SMTP发送邮件失败问题求助

兄弟,我之前也踩过一模一样的坑——从虚拟主机迁到VPS后,之前好好的邮件功能突然罢工,简直头大!咱们一步步排查,肯定能找到问题所在:

先从VPS服务器层面找原因(虚拟主机默认帮你搞定的,VPS得自己来)

  • 检查端口是否被防火墙拦截:你用的465端口(SSL),先确认VPS的防火墙(比如ufw、firewalld)有没有放行这个端口。可以在VPS终端敲命令测试连通性:
    nc -zv mail.mydomain.com 465
    
    如果显示“connection refused”,那就是防火墙拦了,赶紧去防火墙规则里开放465和587端口。
  • 确认PHP必要扩展是否启用:发送SSL加密的邮件需要openssl扩展,你可以用php -m命令查看有没有这个模块,或者在phpinfo页面里搜openssl。另外检查php.ini里的SMTP、smtp_port有没有被错误配置成其他值。
  • 先脱离框架测试SMTP连通性:别先纠结CodeIgniter,写个简单的PHPMailer脚本测试,能拿到更详细的错误信息,比如是认证失败还是连接超时:
    <?php
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    
    require 'vendor/autoload.php';
    
    $mail = new PHPMailer(true);
    
    try {
        $mail->SMTPDebug = 2; // 开启调试模式,能看到每一步的交互
        $mail->isSMTP();                                           
        $mail->Host       = 'mail.mydomain.com';                    
        $mail->SMTPAuth   = true;                                   
        $mail->Username   = 'myname@mydomain.org';                     
        $mail->Password   = 'mypassword';                               
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            
        $mail->Port       = 465;                                    
    
        $mail->setFrom('myname@mydomain.org', 'Your Name');
        $mail->addAddress('你的测试邮箱@example.com');     
    
        $mail->isHTML(true);                                  
        $mail->Subject = 'VPS SMTP测试邮件';
        $mail->Body    = '这是用来测试VPS SMTP连通性的邮件';
    
        $mail->send();
        echo '邮件发送成功!';
    } catch (Exception $e) {
        echo "发送失败,错误信息: {$mail->ErrorInfo}";
    }
    

再检查CodeIgniter的配置细节

  • 修正换行符配置:你配置里的email.newline = &quot;\r\n&quot;;有点问题,HTML实体&quot;在配置文件里可能不会被正确解析,直接改成:
    email.newline = "\r\n";
    
    或者试试用PHP的系统常量PHP_EOL,适配不同系统的换行规则。
  • 确认配置真的生效了:有时候迁服务器后缓存没清,或者配置文件没上传对,你可以在代码里打印当前的邮件配置看看:
    $emailConfig = config('Email');
    var_dump($emailConfig);
    
    核对下SMTPHost、SMTPPort这些参数是不是和你设置的一致。
  • 换587端口+TLS加密试试:465是SSL加密,587通常用TLS,你之前试过587的话,记得把email.SMTPCrypto改成tls,而不是ssl,有些邮件服务商对587的支持更稳定。

最后几个容易忽略的点

  • 问问VPS服务商有没有封禁SMTP端口:不少VPS厂商为了防垃圾邮件,会默认封禁465、25这类端口,需要你提交申请解封。
  • 检查邮箱账号的IP限制:有些邮件服务商(比如国内的)会对陌生IP登录的账号做限制,你可以去邮箱后台看看登录日志,或者用服务商的IP信誉工具查下你的VPS IP有没有被拉黑。

备注:内容来源于stack exchange,提问作者user1314836

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:38:01