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

使用AWS SES v2 Java SDK模板发邮件遇问题:无报错却未收到

问题排查指引
  • 模板内容与合规性检查:确认模板的HTML/文本部分没有触发垃圾邮件过滤规则,若使用联系列表功能必须包含符合要求的退订链接。同时验证TEMPLATE_DATA是合法JSON格式,变量名与模板占位符完全匹配——空或格式错误的模板数据可能导致邮件被静默丢弃。
  • 配置集与抑制列表验证:检查配置集是否开启了抑制列表功能,确认收件邮箱未被加入抑制列表。同时开启配置集的所有事件发布(发送、送达、退回、投诉),通过CloudWatch日志查看邮件的详细状态流转。
  • 收件方邮箱与域名验证:提醒收件人检查垃圾邮件文件夹;确认发件身份的SPF/DKIM/DMARC记录已正确配置,错误的DNS记录会导致邮件被收件方域名拒收且不触发退回通知。
  • 联系列表话题订阅检查:如果使用了ListManagementOptions,必须确保目标邮箱已订阅指定话题——未订阅的邮箱会被SES自动过滤,控制台仍会统计为“已发送”但不会实际投递。
修正后的代码示例
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sesv2.SesV2Client;
import software.amazon.awssdk.services.sesv2.model.*;

public class SendTemplateEmail {
    private static final String CONFIGSET = "你的配置集名称";
    private static final String FROM = "发件邮箱地址";
    private static final String IDENTITYARN = "发件身份ARN";
    private static final String TEMPLATE_DATA = "{\"siteName\":\"我的站点\", \"updateContent\":\"新增功能模块\"}"; // 替换为实际模板数据
    private static final String CONTACT_LIST = "你的联系列表名称"; // 可选,按需启用
    private static final String TOPIC_SITE_UPDATES = "站点更新话题"; // 可选,按需启用

    public static void main(String[] args) {
        try (SesV2Client client = SesV2Client.builder()
                .region(Region.US_EAST_1)
                .build()) {

            // 调试用:确认模板可正常获取
            GetEmailTemplateResponse templateResp = client.getEmailTemplate(
                    GetEmailTemplateRequest.builder()
                            .templateName("SiteUpdateTemplate")
                            .build());
            System.out.println("加载到的模板HTML: " + templateResp.template().htmlPart());

            EmailContent emailContent = EmailContent.builder()
                    .template(Template.builder()
                            .templateName("SiteUpdateTemplate")
                            .templateData(TEMPLATE_DATA)
                            .build())
                    .build();

            SendEmailRequest sendRequest = SendEmailRequest.builder()
                    .configurationSetName(CONFIGSET)
                    .fromEmailAddress(FROM)
                    .fromEmailAddressIdentityArn(IDENTITYARN)
                    .destination(Destination.builder()
                            .toAddresses("test@gmail.com")
                            .build())
                    .content(emailContent)
                    // 仅当收件人已订阅该话题时启用,否则注释/删除此段
                    // .listManagementOptions(ListManagementOptions.builder()
                    //         .contactListName(CONTACT_LIST)
                    //         .topicName(TOPIC_SITE_UPDATES)
                    //         .build())
                    .build();

            client.sendEmail(sendRequest);
            System.out.println("模板邮件请求已提交至SES");
        } catch (Exception e) {
            System.err.println("发送失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

代码说明

  • 移除了重复创建Template对象的冗余代码,优化了构建逻辑。
  • 注释了ListManagementOptions部分,这是常见的静默失败诱因,若无需列表管理可直接删除该配置。
  • 添加了模板加载的调试输出,便于确认模板内容是否正确获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:24:46