Go结合AWS SES发送邮件异常:计数增长但未收到邮件求助
问题解答
1. SES计数递增但收不到邮件的排查方向
- 沙箱限制:新创建的AWS SES账号默认处于沙箱模式,仅能向SES控制台已验证的收件人邮箱发送邮件,且发件人邮箱也必须完成验证。若收件人未验证,邮件会被SES拦截,不会实际送达,但仍会计入“已发送邮件”统计。
- 邮件被归类为垃圾邮件:优先检查收件邮箱的垃圾邮件/垃圾箱文件夹,SES发送的邮件常被邮箱服务商标记为垃圾。可在SES控制台「已发送邮件」列表中查看单条邮件的送达状态,确认是否存在退信、拒收等记录。
- SMTP配置错误:
- 端口需正确:SES SMTP仅支持587(STARTTLS)和465(SSL)端口,请勿使用其他端口。
- SMTP凭证需对应:必须在IAM控制台生成SES专用SMTP凭证,而非普通IAM访问密钥。
- 发件人地址需验证:发件人邮箱或域名必须在SES中完成身份验证,否则邮件会被拦截。
- Lambda网络配置问题:若Lambda部署在VPC内,需确保其能访问SES的SMTP公网端点。VPC内的Lambda默认无公网访问权限,需配置NAT网关或部署在公有子网并启用公网访问。
2. ParseMultipartForm(10 << 20)与SES 10MB限制的关系
10 << 20 等价于10MB,该设置用于限制HTTP表单数据在内存中的存储上限,超出部分会写入Lambda的临时磁盘存储。
SES的10MB限制指整个邮件的总大小(含邮件内容、附件、头部信息等),此表单解析设置与SES限制本身不冲突,但需注意:
- 最终组装的邮件(表单数据转成的内容、附件等)总大小不可超过10MB。
- 若表单包含大文件,即便
ParseMultipartForm能处理,也要确保最终邮件大小符合SES要求。
3. 是否必须使用AWS SDK的SES包?
不需要。AWS SES支持SMTP协议和API调用两种发送方式:
- 用Go标准库
net/smtp结合SES SMTP凭证发送邮件是完全合法且可行的方案,配置正确即可正常发送。 - AWS SDK的SES包只是封装了SES的API接口,提供了另一种发送途径,两者无强制选择要求,可根据需求决定(API方式支持更多高级功能,SMTP方式更通用)。
内容的提问来源于stack exchange,提问作者J86
相关产品推荐
相关产品推荐

