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

无法通过CodeIgniter邮件库结合Amazon SES发送邮件问题

CodeIgniter + Amazon SES 邮件发送问题排查

一、先修正配置中的冲突问题

你的SMTP配置存在明显冲突:

  • smtp_host使用了ssl://前缀,但smtp_port设为587(TLS协议端口),两者不匹配。二选一修正:
    1. TLS模式(推荐587端口):去掉smtp_host的ssl://前缀,保留smtp_crypto为tls
    2. SSL模式(465端口):将smtp_port改为465,smtp_crypto设为ssl,保留smtp_host的ssl://前缀

修正后的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的核心限制

  1. 发件人验证:确认admin_email对应的邮箱/域名已经在SES控制台完成验证,未验证的地址无法发送邮件
  2. 沙箱模式限制:如果你的SES账户还在沙箱模式下,只能发送给已验证的收件人,不能发给未验证的邮箱
  3. IP权限:检查EC2实例的公网IP是否添加到SES的已验证发件IP列表中,避免被SES拦截
  4. 发送额度:确认SES账户有足够的发送配额,没有被限流

四、检查收件端情况

  • 测试收件邮箱的垃圾邮件箱,很多时候邮件会被归类到垃圾箱
  • 如果处于SES沙箱模式,换一个已验证的收件邮箱测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:15:50