= AWS Simple Email Service (SES) Component
:doctitle: AWS Simple Email Service (SES)
:shortname: aws2-ses
:artifactid: camel-aws2-ses
:description: Send e-mails through AWS SES service using AWS SDK version 2.x.
:since: 3.1
:supportlevel: Stable
:component-header: Only producer is supported
//Manually maintained attributes
:group: AWS
:camel-spring-boot-name: aws2-ses

*Since Camel {since}*

*{component-header}*

The AWS2 SES component supports sending emails with
https://aws.amazon.com/ses[Amazon's SES] service.

Prerequisites

You must have a valid Amazon Web Services developer account, and be
signed up to use Amazon SES. More information is available at
https://aws.amazon.com/ses[Amazon SES].

== URI Format

------------------------
aws2-ses://from[?options]
------------------------

You can append query options to the URI in the following format,
?options=value&option2=value&...

// component-configure options: START

// component-configure options: END

// component options: START
include::partial$component-configure-options.adoc[]
include::partial$component-endpoint-options.adoc[]
// component options: END

// endpoint options: START

// endpoint options: END

Required SES component options

You have to provide the amazonSESClient in the
Registry or your accessKey and secretKey to access
the https://aws.amazon.com/ses[Amazon's SES].

== Usage

=== Static credentials vs Default Credential Provider

You have the possibility of avoiding the usage of explicit static credentials, by specifying the useDefaultCredentialsProvider option and set it to true.

 - Java system properties - aws.accessKeyId and aws.secretKey
 - Environment variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.
 - Web Identity Token from AWS STS.
 - The shared credentials and config files.
 - Amazon ECS container credentials - loaded from the Amazon ECS if the environment variable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI is set.
 - Amazon EC2 Instance profile credentials. 

For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]

=== Message headers evaluated by the SES producer

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|`CamelAwsSesFrom` |`String` |The sender's email address.

|`CamelAwsSesTo` |`List<String>` |The destination(s) for this email.

|`CamelAwsSesSubject` |`String` |The subject of the message.

|`CamelAwsSesReplyToAddresses` |`List<String>` |The reply-to email address(es) for the message.

|`CamelAwsSesReturnPath` |`String` |The email address to which bounce notifications are to be forwarded.

|`CamelAwsSesHtmlEmail` |`Boolean` |The flag to show if email content is HTML.
|=======================================================================

=== Message headers set by the SES producer

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|`CamelAwsSesMessageId` |`String` |The Amazon SES message ID.
|=======================================================================

=== Advanced SesClient configuration

If you need more control over the `SesClient` instance
configuration you can create your own instance and refer to it from the
URI:

[source,java]
-------------------------------------------------------------
from("direct:start")
.to("aws2-ses://example@example.com?amazonSESClient=#client");
-------------------------------------------------------------

The `#client` refers to a `SesClient` in the Registry.

== Examples

=== Producer Examples

[source,java]
--------------------------------------------------------------------------------
from("direct:start")
    .setHeader(SesConstants.SUBJECT, constant("This is my subject"))
    .setHeader(SesConstants.TO, constant(Collections.singletonList("to@example.com"))
    .setBody(constant("This is my message text."))
    .to("aws2-ses://from@example.com?accessKey=xxx&secretKey=yyy");
--------------------------------------------------------------------------------

== Dependencies

Maven users will need to add the following dependency to their pom.xml.

*pom.xml*

[source,xml]
---------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws2-ses</artifactId>
    <version>${camel-version}</version>
</dependency>
---------------------------------------

where `$\{camel-version}` must be replaced by the actual version of Camel.



include::spring-boot:partial$starter.adoc[]
