无法通过CodeIgniter邮件库结合Amazon SES发送邮件问题
CodeIgniter + Amazon SES 邮件发送问题排查
一、先修正配置中的冲突问题
你的SMTP配置存在明显冲突:
smtp_host使用了ssl://前缀,但smtp_port设为587(TLS协议端口),两者不匹配。二选一修正:- TLS模式(推荐587端口):去掉
smtp_host的ssl://前缀,保留smtp_crypto为tls - SSL模式(465端口):将
smtp_port改为465,smtp_crypto设为ssl,保留smtp_host的ssl://前缀
- TLS模式(推荐587端口):去掉
修正后的TLS模式配置示例:
$config['email_config'] = [ 'mailtype' => 'html', 'protocol' => 'smtp', 'smtp_host' => 'email-smtp.ap-south-1.amazonaws.com', 'smtp_port' => 587, 'smtp_user' => 'AKIAZJ2TDSA******', 'smtp_pass' => 'B*****N/aBD2mH3nWT4DiOfJ9NI3NRh*******', 'smtp_crypto' => 'tls', 'newline' => "\r\n", 'crlf' => "\r\n" // 补充换行符配置,避免格式问题 ];
二、开启调试查看真实交互日志
代码里注释掉的print_debugger()是排查关键!不管发送结果如何,都要打开它,能看到SMTP连接、认证、发送的完整日志,比如是否真的和SES建立连接、有没有被拒绝的提示。
修改发送代码:
$this->email->clear(); $this->email->from($this->config->item('admin_email', 'ion_auth'), $this->config->item('site_title', 'ion_auth')); $this->email->reply_to($this->config->item('admin_email', 'ion_auth'), $this->config->item('site_title', 'ion_auth')); $this->email->to('k3@vaksys.com'); $this->email->subject('test subject'); $this->email->message("test"); if ($this->email->send()) { echo $this->email->print_debugger(); // 查看成功时的详细日志 echo ' sent'; } else { echo $this->email->print_debugger(); // 查看失败时的错误信息 echo 'not sent'; }
三、检查Amazon SES的核心限制
- 发件人验证:确认
admin_email对应的邮箱/域名已经在SES控制台完成验证,未验证的地址无法发送邮件 - 沙箱模式限制:如果你的SES账户还在沙箱模式下,只能发送给已验证的收件人,不能发给未验证的邮箱
- IP权限:检查EC2实例的公网IP是否添加到SES的已验证发件IP列表中,避免被SES拦截
- 发送额度:确认SES账户有足够的发送配额,没有被限流
四、检查收件端情况
- 测试收件邮箱的垃圾邮件箱,很多时候邮件会被归类到垃圾箱
- 如果处于SES沙箱模式,换一个已验证的收件邮箱测试
内容的提问来源于stack exchange,提问作者Zivaan Solutions
相关产品推荐
相关产品推荐

