使用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
相关产品推荐
相关产品推荐

