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

使用CodeIgniter通过Gmail发邮件,收件人收不到问题咨询

问题排查与解决方案

一、Gmail侧必要配置检查

  • 确认IMAP访问已启用:登录Gmail账户,进入「设置」→「转发和POP/IMAP」,在IMAP访问区域勾选「启用IMAP」并保存更改。部分SMTP中继场景需要IMAP服务配合才能完成正常投递。
  • 查看账户安全日志:进入Google账户的「安全」页面,检查最近的登录活动,确认服务器IP未被标记为异常。若存在“未知设备登录”提醒,需手动允许该登录行为。
  • 验证应用密码有效性:确保使用的应用密码是针对「邮件」类应用生成的,且生成后未修改过Google账户的两步验证设置(若修改过两步验证,需重新生成应用密码)。
  • 检查邮件发送限额:Gmail免费账户单日发送上限为500封,若超出限额会被临时限制投递,需等待24小时后恢复。

二、代码核心配置修正

你的代码存在关键配置错误,导致并未实际使用Gmail SMTP中继:

  • 将$config['protocol']的值从'mail'改为'smtp':当前protocol设为mail时,系统会调用本地sendmail程序发送邮件,完全忽略你配置的Gmail SMTP参数,这也是函数返回true但邮件未通过Gmail投递的主要原因。
  • 调整SMTP加密方式与端口匹配:587端口对应的加密方式是'tls',而非'ssl'(ssl对应465端口),修改$config['smtp_crypto'] = 'tls';。

修正后的核心配置段:

$config['protocol']  = 'smtp';
// 移除mailpath配置,使用SMTP时无需该参数
// $config['mailpath']  = '/usr/sbin/sendmail';
$config['smtp_host'] = 'smtp.gmail.com';
$config['smtp_user'] = 'eticketing.info.cdit@gmail.com';
$config['smtp_pass'] = 'MYGMAILAPPPASSWORD';
$config['smtp_port'] = 587;
$config['smtp_crypto']  = 'tls';

三、额外排查步骤

  • 检查收件人邮箱的垃圾邮件/垃圾箱:邮件可能被收件方反垃圾系统拦截,建议将发件邮箱添加到收件人白名单。
  • 启用CodeIgniter邮件调试:取消代码中调试部分的注释,查看print_debugger()输出的详细日志,确认SMTP连接和投递过程是否存在隐藏错误:
echo "<p>Email NOT Send</p>";
echo $email->print_debugger();
die;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:15:10