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

如何用Apache Camel aws2-ses组件发送带附件的RawMessage邮件?

解决Apache Camel aws2-ses组件发送带附件Raw邮件的问题

1. 显式指定sendRawEmail操作

aws2-ses组件默认执行sendEmail操作,必须显式指定触发sendRawEmail:

  • 在路由URI中添加operation=sendRawEmail参数
  • 或者在消息头设置CamelAwsSesOperation为sendRawEmail

示例路由配置:

from("direct:sendRawMail")
    .to("aws2-ses://default?operation=sendRawEmail&region=us-east-1");

2. 正确构造消息体格式

组件不接受直接传递RawMessage对象,需将MIME消息字节数组转为Base64字符串后作为消息体:

// 生成包含HTML内容和PDF附件的MIME消息
MimeMessage mimeMsg = buildMimeMessageWithAttachment();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
mimeMsg.writeTo(baos);
byte[] mimeBytes = baos.toByteArray();

// 转Base64字符串作为Camel消息体
String base64Content = Base64.getEncoder().encodeToString(mimeBytes);
exchange.getIn().setBody(base64Content);

// 设置必填邮箱头
exchange.getIn().setHeader("CamelAwsSesSource", "verified-sender@yourdomain.com");
exchange.getIn().setHeader("CamelAwsSesDestinations", List.of("verified-recipient@yourdomain.com"));

3. 适配SES沙箱限制

沙箱环境下必须保证:

  • 发件人和收件人均为AWS控制台验证通过的邮箱
  • 不能发送给未验证的邮箱地址,否则会被拦截

4. 备选方案:直接调用SES v2客户端

如果组件仍无法正常工作,可直接注入SesClient调用原生API:

@Autowired
private SesClient sesClient;

public void sendRawMailDirect(byte[] mimeBytes) {
    RawMessage rawMsg = RawMessage.builder()
            .data(SdkBytes.fromByteArray(mimeBytes))
            .build();

    SendRawEmailRequest req = SendRawEmailRequest.builder()
            .rawMessage(rawMsg)
            .source("verified-sender@yourdomain.com")
            .destinations("verified-recipient@yourdomain.com")
            .build();

    sesClient.sendRawEmail(req);
}

排查要点

  • 检查消息头CamelAwsSesOperation是否正确设置为sendRawEmail
  • 确认Base64编码无多余换行或空格
  • 开启Camel DEBUG日志,查看组件实际发送的请求内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:02:09