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代码里添加调试输出,发送邮件后执行:
这会输出SMTP对话的详细过程,比如认证失败、连接超时等具体错误。echo $this->email->print_debugger(); - 查看服务器系统的邮件日志,比如
/var/log/mail.log(Debian/Ubuntu)或/var/log/maillog(CentOS),里面会记录邮件发送的底层错误。
- 在CodeIgniter代码里添加调试输出,发送邮件后执行:
尝试加密连接
现在大部分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
相关产品推荐
相关产品推荐

