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

SES子域名无法接收邮件:Terraform配置故障排查求助

AWS SES邮件接收配置故障排查

Terraform配置代码

locals {
  emails-chat-replies-domain = "dev.chat.mydomain.com"
  ses-smtp-domain            = "inbound-smtp.eu-west-1.amazonaws.com"
}
resource "aws_ses_domain_identity" "chat-replies" {
  provider = aws.eu-west-1
  domain   = local.emails-chat-replies-domain
}

resource "aws_route53_record" "chat-replies-amazonses-verification-record" {
  provider = aws.eu-west-1
  zone_id  = data.aws_route53_zone.mydomain.zone_id
  name     = "_amazonses.${aws_ses_domain_identity.chat-replies.id}"
  type     = "TXT"
  ttl      = "600"
  records  = [aws_ses_domain_identity.chat-replies.verification_token]
}

resource "aws_ses_domain_identity_verification" "chat-replies-verification" {
  provider = aws.eu-west-1
  domain   = aws_ses_domain_identity.chat-replies.id

  depends_on = [aws_route53_record.chat-replies-amazonses-verification-record]
}

resource "aws_route53_record" "chat-replies-mx" {
  provider = aws.eu-west-1
  zone_id  = data.aws_route53_zone.mydomain.zone_id
  name     = local.emails-chat-replies-domain
  type     = "MX"
  ttl      = "600"

  records = ["10 ${local.ses-smtp-domain}."]
}

resource "aws_ses_receipt_rule_set" "chat-replies" {
  provider      = aws.eu-west-1
  rule_set_name = "chat-replies"
}

resource "aws_ses_receipt_rule" "chat-replies" {
  provider      = aws.eu-west-1
  name          = "${local.deployment-name}-chat-replies-store"
  rule_set_name = aws_ses_receipt_rule_set.chat-replies.id
  recipients    = [local.emails-chat-replies-domain]
  enabled       = true
  scan_enabled  = true

  lambda_action {
    position        = 1
    function_arn    = aws_lambda_function.ses-chat-replies.arn
    invocation_type = "Event"
  }
}

邮件投递错误信息

地址未找到
你的邮件无法投递到azerty@dev.chat.mydomain.com,因为该地址不存在或无法接收邮件。

报告邮件传输代理:dns; googlemail.com
来源邮件传输代理:dns; me@mycompany.com
到达时间:2023年3月10日 星期五 00:56:52 (PST,西八区)
原始邮件ID:aa10938b-34c1-febd-5fcc-8f2130f46d5c@mycompany.com

最终收件人:rfc822; azert@dev.chat.mydomain.com
操作:失败
状态:5.1.1
远程邮件传输代理:dns; inbound-smtp.eu-west-1.amazonaws.com. (54.155.140.59,域名dev.chat.mydomain.com的服务器)
诊断代码:smtp; 550 5.1.1 请求操作未执行:邮箱不可用
最后尝试时间:2023年3月10日 星期五 00:56:53 (PST,西八区)

DNS MX记录查询结果

; <<>> DiG 9.18.12 <<>> dev.chat.mydomain.com MX
;; 全局选项:+cmd
;; 收到响应:
;; ->>头部<<- 操作码:QUERY,状态:NOERROR,ID:21674
;; 标志:qr rd ra;查询数:1,回答数:1,授权数:0,附加数:1

;; OPT伪段:
; EDNS:版本:0,标志:;UDP:1472
;; 查询段:
;dev.chat.ninefive.io.          IN      MX

;; 回答段:
dev.chat.mydomain.com.   600     IN      MX      10 inbound-smtp.eu-west-1.amazonaws.com.

;; 查询耗时:21毫秒
;; 服务器:192.168.0.254#53(192.168.0.254) (UDP)
;; 查询时间:2023年3月11日 星期六 12:35:33 CET(中欧时间)
;; 接收消息大小:101

排查提示

  • 确认规则集是否为活跃状态:SES不会自动使用新建的规则集,必须将chat-replies规则集设置为默认活跃规则集。可添加以下Terraform资源实现:
    resource "aws_ses_active_receipt_rule_set" "chat-replies-active" {
      provider      = aws.eu-west-1
      rule_set_name = aws_ses_receipt_rule_set.chat-replies.id
    }
    
  • 检查域名验证状态:登录AWS控制台SES服务,查看dev.chat.mydomain.com的验证状态是否为"已验证"。验证未完成的话,SES会拒绝接收该域名的邮件。
  • 添加Lambda调用权限:SES需要被授权调用目标Lambda函数,否则无法触发。添加以下权限配置:
    resource "aws_lambda_permission" "ses_chat_replies" {
      provider = aws.eu-west-1
      statement_id  = "allow_ses_invoke"
      action        = "lambda:InvokeFunction"
      function_name = aws_lambda_function.ses-chat-replies.function_name
      principal     = "ses.amazonaws.com"
      source_arn    = aws_ses_receipt_rule.chat-replies.arn
    }
    
  • 查看SES接收日志:在CloudWatch Logs中找到SES的接收日志组(通常命名为/aws/ses/receiving),查看具体的邮件处理日志,可定位规则不匹配、权限不足等问题。
  • 确认收件规则配置:检查收件规则的enabled属性是否为true,recipients列表是否正确包含dev.chat.mydomain.com,同时确认没有其他规则拦截该域名的邮件。
  • 检查区域一致性:确认所有SES资源(域名验证、规则集、收件规则)都部署在eu-west-1区域,且MX记录指向的是该区域的SES inbound服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:44:56