diff --git a/components/camel-aws/camel-aws2-ses/pom.xml b/components/camel-aws/camel-aws2-ses/pom.xml index 6175d403bbf52..44801fb2ac59e 100644 --- a/components/camel-aws/camel-aws2-ses/pom.xml +++ b/components/camel-aws/camel-aws2-ses/pom.xml @@ -80,5 +80,10 @@ camel-test-spring-junit5 test + + org.assertj + assertj-core + test + diff --git a/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Producer.java b/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Producer.java index 6feec964451bf..f3c4a893a6159 100644 --- a/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Producer.java +++ b/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Producer.java @@ -101,7 +101,8 @@ private software.amazon.awssdk.services.ses.model.Message createMessage(Exchange = software.amazon.awssdk.services.ses.model.Message.builder(); String content; if (exchange.getIn().getBody() instanceof RawMessage raw) { - content = raw.data().toString(); + // SdkBytes.toString() is a debug descriptor (SdkBytes(bytes=0x...)), not the payload + content = raw.data().asUtf8String(); } else { content = exchange.getIn().getBody(String.class); } diff --git a/components/camel-aws/camel-aws2-ses/src/test/java/org/apache/camel/component/aws2/ses/SesComponentTest.java b/components/camel-aws/camel-aws2-ses/src/test/java/org/apache/camel/component/aws2/ses/SesComponentTest.java index 936963872e9f5..da952d47b368d 100644 --- a/components/camel-aws/camel-aws2-ses/src/test/java/org/apache/camel/component/aws2/ses/SesComponentTest.java +++ b/components/camel-aws/camel-aws2-ses/src/test/java/org/apache/camel/component/aws2/ses/SesComponentTest.java @@ -26,9 +26,12 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.junit5.CamelTestSupport; import org.junit.jupiter.api.Test; +import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.services.ses.model.MessageTag; +import software.amazon.awssdk.services.ses.model.RawMessage; import software.amazon.awssdk.services.ses.model.SendEmailRequest; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; public class SesComponentTest extends CamelTestSupport { @@ -36,6 +39,17 @@ public class SesComponentTest extends CamelTestSupport { @BindToRegistry("amazonSESClient") private AmazonSESClientMock sesClient = new AmazonSESClientMock(); + @Test + void rawMessageBodyIsSentAsItsContentNotTheSdkBytesDescriptor() { + String mime = "From: from@example.com\r\nSubject: Subject\r\n\r\nThis is my message text."; + template.send("direct:start", exchange -> exchange.getIn().setBody( + RawMessage.builder().data(SdkBytes.fromUtf8String(mime)).build())); + + // SdkBytes.toString() would yield "SdkBytes(bytes=0x...)" rather than the message content + String sent = sesClient.getSendEmailRequest().message().body().text().data(); + assertThat(sent).isEqualTo(mime); + } + @Test public void sendInOnlyMessageUsingUrlOptions() { Exchange exchange = template.send("direct:start", new Processor() {