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

CodeIgniter服务器端仅上午可发邮件,下午发送失败求助

时段性邮件发送故障排查与解决建议

看起来你遇到了一个挺棘手的时段性问题——本地正常、服务器上午能发下午发不出,而且调试信息还显示“发送成功”,这确实挺迷惑人的。我来帮你捋捋可能的原因和解决办法:

1. 首先注意到配置里的冲突点

你在email.php里同时配置了sendmail协议和SMTP的全套参数,但CodeIgniter在使用sendmail协议时,会直接调用服务器上的sendmail程序,完全忽略SMTP相关配置。这就导致你实际是在依赖服务器的本地邮件服务发件,而不是直接连接Exchange的SMTP服务器。

2. 时段性故障的核心可能原因

(1)服务器sendmail队列阻塞或资源限制

下午大概率是邮件发送高峰,服务器的sendmail队列可能堆积了大量邮件,导致新的请求被延迟甚至丢弃。你可以登录服务器做这些检查:

  • 执行命令mailq查看邮件队列状态,看看有没有大量待发送的邮件;
  • 查看邮件服务日志(通常在/var/log/mail.log或/var/log/messages),下午发送邮件时观察是否有队列满、超时、被拒绝等报错;
  • 检查服务器下午的资源使用情况(CPU、内存、磁盘IO),如果资源占满,sendmail可能无法正常工作。

(2)邮件服务商的时段性限制

你的发件邮箱是Exchange托管的,但通过服务器sendmail中转时,下午Exchange服务器可能对该服务器IP设置了流量限制,或者IP被临时加入了可疑列表,导致邮件无法送达。

(3)调试信息的误导

CI的调试信息显示“发送成功”,只是说明它成功调用了sendmail程序,但sendmail是否真的把邮件投递出去,要看它的执行日志,而不是CI的返回结果。

3. 具体解决步骤

(1)修正配置,改用SMTP直接发送

把协议改成smtp,让CI直接连接Exchange服务器发件,绕过服务器的sendmail中转,这样能更直接地排查SMTP层面的错误,也能避免队列问题。修正后的配置如下(注意smtp_user要填完整的发件邮箱地址,你之前写的MyMail.com大概率是错的):

$config['protocol'] = 'smtp'; 
$config['smtp_host'] = "smtp.exchangeadministrado.com"; 
$config['smtp_user'] = "status.embarques@autotransportecari.com"; 
$config['smtp_pass'] = "MyPass"; 
$config['smtp_port'] = "587"; 
$config['smtp_timeout'] = "30"; 
$config['smtp_keepalive'] = TRUE; 
$config['smtp_crypto'] = "tls"; 
$config['charset'] = "utf-8"; 
$config['mailtype'] = "html"; 
$config['crlf'] = "\r\n"; 
$config['newline'] = "\r\n"; 

(2)添加详细错误日志

在邮件发送代码后添加日志记录,即使调试显示成功,也能捕获更详细的执行信息:

$htmlContent = $this->load->view('emailExpo_view',$data,true); 
$this->email->set_crlf( "\r\n" ); 
$this->email->to(implode(', ', array($correoCliente1, $correoCliente2, $correoCliente3))); 
$this->email->from('status.embarques@autotransportecari.com'); 
$this->email->cc($adresses); 
$this->email->subject('Actualización de Exportación'); 
$this->email->attach(FCPATH . "imagenes/cari.png", "inline"); 
$this->email->message($htmlContent); 

if (!$this->email->send()) {
    log_message('error', '邮件发送失败: ' . $this->email->print_debugger());
} else {
    log_message('info', '邮件发送执行记录: ' . $this->email->print_debugger());
}

(3)若坚持使用sendmail,排查服务器本地服务

  • 执行service sendmail restart重启邮件服务,测试下午是否能正常发送;
  • 联系服务器运维,检查是否有下午时段的资源限制策略。

内容的提问来源于stack exchange,提问作者Pahoran Alanis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:06:22