diff --git a/api-key-module/pom.xml b/api-key-module/pom.xml
index d1b36ef..2013e10 100644
--- a/api-key-module/pom.xml
+++ b/api-key-module/pom.xml
@@ -53,5 +53,10 @@
1.0.0.Final
provided
+
+ com.amazonaws
+ aws-java-sdk-ses
+ 1.11.538
+
\ No newline at end of file
diff --git a/api-key-module/src/main/java/com/gwidgets/providers/SESEmailSenderProvider.java b/api-key-module/src/main/java/com/gwidgets/providers/SESEmailSenderProvider.java
new file mode 100644
index 0000000..0939afc
--- /dev/null
+++ b/api-key-module/src/main/java/com/gwidgets/providers/SESEmailSenderProvider.java
@@ -0,0 +1,47 @@
+package com.gwidgets.providers;
+
+import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
+import com.amazonaws.services.simpleemail.model.Body;
+import com.amazonaws.services.simpleemail.model.Content;
+import com.amazonaws.services.simpleemail.model.Destination;
+import com.amazonaws.services.simpleemail.model.Message;
+import com.amazonaws.services.simpleemail.model.SendEmailRequest;
+import java.util.Map;
+import org.jboss.logging.Logger;
+import org.keycloak.email.EmailSenderProvider;
+import org.keycloak.models.UserModel;
+
+public class SESEmailSenderProvider implements EmailSenderProvider {
+
+ private static final Logger log = Logger.getLogger("org.keycloak.events");
+
+ private final AmazonSimpleEmailService sesClient;
+
+ public SESEmailSenderProvider(
+ AmazonSimpleEmailService sesClient) {
+ this.sesClient = sesClient;
+ }
+
+ @Override
+ public void send(Map config, UserModel user, String subject, String textBody,
+ String htmlBody) {
+
+ log.info("attempting to send email using aws ses for " + user.getEmail());
+
+ Message message = new Message().withSubject(new Content().withData(subject))
+ .withBody(new Body().withHtml(new Content().withData(htmlBody))
+ .withText(new Content().withData(textBody).withCharset("UTF-8")));
+
+ SendEmailRequest sendEmailRequest = new SendEmailRequest()
+ .withSource("example<" + config.get("from") + ">")
+ .withMessage(message).withDestination(new Destination().withToAddresses(user.getEmail()));
+
+ sesClient.sendEmail(sendEmailRequest);
+ log.info("email sent to " + user.getEmail() + " successfully");
+ }
+
+ @Override
+ public void close() {
+
+ }
+}
diff --git a/api-key-module/src/main/java/com/gwidgets/providers/SESEmailSenderProviderFactory.java b/api-key-module/src/main/java/com/gwidgets/providers/SESEmailSenderProviderFactory.java
new file mode 100644
index 0000000..8010efa
--- /dev/null
+++ b/api-key-module/src/main/java/com/gwidgets/providers/SESEmailSenderProviderFactory.java
@@ -0,0 +1,50 @@
+package com.gwidgets.providers;
+
+import com.amazonaws.auth.EnvironmentVariableCredentialsProvider;
+import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
+import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
+import java.util.Objects;
+import org.keycloak.Config.Scope;
+import org.keycloak.email.EmailSenderProvider;
+import org.keycloak.email.EmailSenderProviderFactory;
+import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.KeycloakSessionFactory;
+
+public class SESEmailSenderProviderFactory implements EmailSenderProviderFactory {
+
+ private static AmazonSimpleEmailService sesClientInstance;
+
+ @Override
+ public EmailSenderProvider create(KeycloakSession session) {
+
+ //using singleton pattern to avoid creating the client each time create is called
+ if (sesClientInstance == null) {
+ String awsRegion = Objects.requireNonNull(System.getenv("AWS_REGION"));
+
+ sesClientInstance =
+ AmazonSimpleEmailServiceClientBuilder
+ .standard().withCredentials(new EnvironmentVariableCredentialsProvider())
+ .withRegion(awsRegion)
+ .build();
+ }
+
+ return new SESEmailSenderProvider(sesClientInstance);
+ }
+
+ @Override
+ public void init(Scope config) {
+
+ }
+
+ @Override
+ public void postInit(KeycloakSessionFactory factory) { }
+
+ @Override
+ public void close() {
+ }
+
+ @Override
+ public String getId() {
+ return "default";
+ }
+}
diff --git a/api-key-module/src/main/resources/META-INF/services/org.keycloak.email.EmailSenderProviderFactory b/api-key-module/src/main/resources/META-INF/services/org.keycloak.email.EmailSenderProviderFactory
new file mode 100644
index 0000000..05e5060
--- /dev/null
+++ b/api-key-module/src/main/resources/META-INF/services/org.keycloak.email.EmailSenderProviderFactory
@@ -0,0 +1 @@
+com.gwidgets.providers.SESEmailSenderProviderFactory
\ No newline at end of file