Spring Boot集成AWS SES v2发送带附件邮件的实现方法
问题根因
SES v2 Java SDK的API结构和v1版本完全不兼容,v1版本专属的SendRawEmailRequest类无法作为v2客户端sendEmail方法的入参,你代码里同时冗余了直连Office365 SMTP发信的无关逻辑,还存在类引用错误的问题。
修正步骤
- 第一步:删除冗余的SMTP发信逻辑
删掉代码中从Properties props = new Properties();开始到System.out.println("email sent");的整段逻辑,这段是直连Office365 SMTP服务发信的代码,和SES发信完全无关,留存还会暴露邮箱账号密码。 - 第二步:替换为SES v2对应的请求构造逻辑
所有SES相关的类统一从software.amazon.awssdk.services.sesv2.model包下导入,不要引入v1版本com.amazonaws.services.simpleemail.model下的同名类,核心发信逻辑替换为如下代码:
// 前面构造MimeMessage、组装附件和正文的逻辑保留,不需要修改 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); message.writeTo(outputStream); SdkBytes data = SdkBytes.fromByteArray(outputStream.toByteArray()); // 构造v2版本的原始邮件请求 RawMessage rawMessage = RawMessage.builder() .data(data) .build(); EmailContent emailContent = EmailContent.builder() .raw(rawMessage) .build(); SendEmailRequest sendEmailRequest = SendEmailRequest.builder() .content(emailContent) .build(); // 调用v2客户端发信 client.sendEmail(sendEmailRequest);
其他注意事项
- 确保项目中引入的是SES v2的官方依赖,不要和v1版本的SES SDK共存,避免类引用冲突,v2 Maven依赖坐标为
software.amazon.awssdk:sesv2。 - 你代码中附件的MIME类型配置错误:当前上传的是csv格式文件,MIME类型应该设置为
text/csv,你写的application/vnd.openxmlformats-officedocument.spreadsheetml.sheet是xlsx格式的对应类型,会导致收件人下载附件后格式识别异常。 - 发信前确认SES客户端初始化的区域、访问凭证配置正确,发信地址已在SES控制台完成身份验证;如果你的SES账号还在沙箱环境中,收件地址也需要提前完成验证才能正常发信。
内容的提问来源于stack exchange,提问作者dibyanshu chatterjee
相关产品推荐
相关产品推荐

