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

Amazon SES与Codeigniter集成出现超时错误求助

解决CodeIgniter集成AWS SES SMTP超时问题

我来帮你排查这个超时问题,咱们从几个常见的关键点入手:

1. 确认AWS SES SMTP主机地址正确

AWS SES的SMTP端点是分区域的,不能填MY HOST这种占位符,比如:

  • 美东1区:email-smtp.us-east-1.amazonaws.com
  • 法兰克福区:email-smtp.eu-central-1.amazonaws.com
    你需要根据自己SES所在的区域填写正确的主机地址,这个可以在AWS控制台SES的「SMTP设置」页面找到。

2. 补充SMTP加密配置

你用的是465端口(SSL专属端口),但CodeIgniter的email库默认不会自动启用SSL加密,必须在配置里加上:

'smtp_crypto' => 'ssl'

缺少这个配置的话,连接会因为加密规则不匹配直接超时。

3. 检查服务器出站端口是否开放

  • 如果应用部署在AWS EC2上,要确保EC2安全组的出站规则允许TCP 465端口访问任意地址;
  • 如果是自建服务器,检查防火墙(比如ufw、iptables)是否放行出站的465端口,很多服务器默认会限制这类邮件端口。

4. 验证SMTP凭证正确性

AWS SES的SMTP用户名和密码不是你的IAM控制台登录凭证,而是需要在IAM控制台专门生成的SMTP密钥(路径:IAM > 用户 > 安全凭证 > SMTP凭证),确认你用的是这组专门的密钥,不是普通的IAM密码。

5. 修正换行符配置

你代码里的'newline' => ' '是无效的写法,应该用标准的邮件协议换行符:

'newline' => "\r\n"

也可以用PHP内置的PHP_EOL,避免因为换行符不兼容导致协议交互失败。

6. 开启调试模式定位细节

在配置里加上调试项,能看到连接过程的详细日志,帮你精准定位问题:

'smtp_debug' => 2

调试信息会输出到页面或日志中,你能清楚看到是连接阶段超时,还是认证阶段出错。

修改后的完整示例配置

$ci = get_instance();
$ci->load->library('email');
$config = array(
    'protocol' => 'smtp',
    'smtp_host' => 'email-smtp.us-east-1.amazonaws.com', // 替换成你的区域SMTP端点
    'smtp_port' => 465,
    'smtp_crypto' => 'ssl',
    'newline' => "\r\n",
    'smtp_user' => 'AWS_SMTP_USERNAME', // 替换成你的SMTP用户名
    'smtp_pass' => 'AWS_SMTP_PASSWORD', // 替换成你的SMTP密码
    'mailtype' => 'html',
    'charset' => 'utf-8',
    'smtp_debug' => 2 // 调试完成后可以关闭
);
$ci->email->initialize($config);

额外可以在服务器上用命令测试网络连通性:

openssl s_client -connect email-smtp.us-east-1.amazonaws.com:465

如果这个命令能成功建立连接,说明网络没问题,问题出在代码配置上;如果连接失败,那就是网络/防火墙的限制导致的超时。

内容的提问来源于stack exchange,提问作者Syed Amir Hussain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:34:14