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

CodeIgniter仅在自有服务器无法通过PHP SMTP发送邮件

排查CodeIgniter邮件在自建服务器无法发送的问题

这种情况我碰到过好几次,大概率是你自己服务器的环境限制或者配置细节没对齐,咱们一步步来排查:

  • 先排查网络与端口问题
    很多云服务器默认会封禁25端口(反垃圾邮件策略),先确认你的服务器能不能连到目标SMTP服务器:

    • 用命令行测试连接:telnet mail.******.com 25 或者 nc -zv mail.******.com 25,如果连不通,要么是服务器防火墙没放行25端口,要么是云服务商封了,建议换成465(SSL)或587(TLS)端口试试。
    • 检查服务器本地防火墙(比如ufw、iptables)是否允许出站的25/465/587端口。
  • 修正配置里的明显错误
    你的配置里有个致命问题:$config['send_multipart'] = \r\n; 这个参数应该是布尔值(true或false),你写成换行符了,这会导致邮件初始化失败!赶紧改成:

    $config['send_multipart'] = false;
    

    或者直接删掉这个配置项,因为CodeIgniter默认就是不启用多部分发送的。

  • 查看详细错误日志
    光猜没用,看日志才是硬道理:

    • 在CodeIgniter代码里添加调试输出,发送邮件后执行:
      echo $this->email->print_debugger();
      
      这会输出SMTP对话的详细过程,比如认证失败、连接超时等具体错误。
    • 查看服务器系统的邮件日志,比如/var/log/mail.log(Debian/Ubuntu)或/var/log/maillog(CentOS),里面会记录邮件发送的底层错误。
  • 尝试加密连接
    现在大部分SMTP服务器都要求加密传输,你的公共服务器可能默认支持,但自建服务器没配置:
    试试切换到SSL/TLS模式:

    // SSL方式(465端口)
    $config['smtp_port'] = 465;
    $config['smtp_crypto'] = 'ssl';
    
    // 或者TLS方式(587端口)
    $config['smtp_port'] = 587;
    $config['smtp_crypto'] = 'tls';
    
  • 检查PHP环境限制
    确认你的服务器PHP环境没有禁用必要的函数:

    • 查看php.ini里的allow_url_fopen是否设为On。
    • 检查disable_functions里有没有fsockopen,如果有,需要移除这个限制(或者联系服务器管理员),因为CodeIgniter的SMTP驱动依赖这个函数建立连接。

内容的提问来源于stack exchange,提问作者Azka Adhyastha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:55:22