AWS SES邮件健康检查失败:Spring Boot应用启动告警求助
这个501 Syntax: HELO <hostname>错误是AWS SES SMTP服务器拒绝了你的HELO/EHLO命令,核心原因是发送的主机名不符合要求——要么为空,要么格式不合法。以下是具体排查步骤:
检查JavaMail的HELO主机名配置
确认Spring Boot配置文件(application.properties/yaml)中是否设置了spring.mail.properties.mail.smtp.localhost属性。SES要求HELO命令必须提供有效的主机名(可以是FQDN、合法的字符串或IP地址,不能为空)。如果未设置,添加配置示例:spring.mail.properties.mail.smtp.localhost=ecs-task-app-01也可以通过ECS元数据动态获取任务私有IP作为主机名,比如在Spring Boot中读取环境变量或调用元数据接口获取。
验证Docker容器的主机名设置
ECS任务默认容器主机名可能是随机值或不符合规范的格式。检查ECS任务定义中的hostname字段是否配置了合法值;进入运行中的容器执行hostname命令,确认输出不为空且格式合规。若异常,在任务定义中指定有效的主机名(如服务名称或自定义标识)。排查JavaMail版本兼容性
旧版本的JavaMail(如com.sun.mail:javax.mail)在容器环境下可能无法自动获取主机名,导致HELO命令发送空值。建议升级至最新的Jakarta Mail依赖(如org.eclipse.angus:angus-mail或com.sun.mail:jakarta.mail),修复容器环境下的主机名获取问题。手动测试SES SMTP连接
使用telnet或openssl手动连接SES SMTP服务器,模拟HELO命令验证主机名有效性:openssl s_client -connect email-smtp.us-east-1.amazonaws.com:587 -starttls smtp HELO your-valid-hostname若返回
250开头的成功响应,说明主机名格式合规;若仍返回501,则需调整主机名(避免特殊字符,确保是有效的DNS名称或IP)。检查Spring Boot健康检查逻辑
确认是否自定义了MailHealthIndicator的逻辑,若有自定义实现,需确保在执行SMTP健康检查时正确设置了HELO主机名,避免覆盖默认的合法配置。
内容的提问来源于stack exchange,提问作者user17982071

