From 7bbeddc2a35820c66caebc3a34f80ff087125dfb Mon Sep 17 00:00:00 2001 From: Stian Thorgersen Date: Tue, 5 Nov 2013 10:58:33 +0000 Subject: [PATCH] Tweaked EmailSender, fixed SSL prop in console + added option for StartTLS --- .../resources/admin/partials/realm-smtp.html | 15 ++++++- .../keycloak/services/email/EmailSender.java | 43 +++++++++++++++---- .../services/email/EmailSenderTest.java | 32 ++++++++++++++ 3 files changed, 81 insertions(+), 9 deletions(-) diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-smtp.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-smtp.html index b3e6d8065ee..6abd4ee4a52 100755 --- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-smtp.html +++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-smtp.html @@ -43,7 +43,7 @@
- +
+
+ +
+ + +
+
Authentication diff --git a/services/src/main/java/org/keycloak/services/email/EmailSender.java b/services/src/main/java/org/keycloak/services/email/EmailSender.java index 872f1fe14d0..960410c76ec 100755 --- a/services/src/main/java/org/keycloak/services/email/EmailSender.java +++ b/services/src/main/java/org/keycloak/services/email/EmailSender.java @@ -51,26 +51,53 @@ public class EmailSender { private static final Logger log = Logger.getLogger(EmailSender.class); - private Properties properties; + private Map config; public EmailSender(Map config) { - properties = new Properties(); - for (Entry e : config.entrySet()) { - properties.put("mail.smtp." + e.getKey(), e.getValue()); - } + this.config = config; } public void send(String address, String subject, String body) throws MessagingException { - Session session = Session.getInstance(properties); + Properties props = new Properties(); + props.setProperty("mail.smtp.host", config.get("host")); + + boolean auth = "true".equals(config.get("auth")); + boolean ssl = "true".equals(config.get("ssl")); + boolean starttls = "true".equals(config.get("starttls")); + + if (config.containsKey("port")) { + props.setProperty("mail.smtp.port", config.get("port")); + } + + if (auth) { + props.put("mail.smtp.auth", "true"); + } + + if (ssl) { + props.put("mail.smtp.socketFactory.port", config.get("port")); + props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); + } + + if (starttls) { + props.put("mail.smtp.starttls.enable", "true"); + } + + String from = config.get("from"); + + Session session = Session.getInstance(props); Message msg = new MimeMessage(session); - msg.setFrom(new InternetAddress(properties.getProperty("mail.smtp.from"))); + msg.setFrom(new InternetAddress(from)); msg.setSubject(subject); msg.setText(body); msg.saveChanges(); Transport transport = session.getTransport("smtp"); - transport.connect(properties.getProperty("mail.smtp.user"), properties.getProperty("mail.smtp.password")); + if (auth) { + transport.connect(config.get("user"), config.get("password")); + } else { + transport.connect(); + } transport.sendMessage(msg, new InternetAddress[] { new InternetAddress(address) }); } diff --git a/services/src/test/java/org/keycloak/services/email/EmailSenderTest.java b/services/src/test/java/org/keycloak/services/email/EmailSenderTest.java index 720af171c91..77863f57fdf 100644 --- a/services/src/test/java/org/keycloak/services/email/EmailSenderTest.java +++ b/services/src/test/java/org/keycloak/services/email/EmailSenderTest.java @@ -70,4 +70,36 @@ public class EmailSenderTest { Assert.assertEquals("Test body", ((String) msg.getContent()).trim()); } + @Test + public void googleTTLS() throws MessagingException, IOException { + HashMap config = new HashMap(); + config.put("from", "stianst@gmail.com"); + config.put("host", "smtp.gmail.com"); + config.put("port", "587"); + config.put("auth", "true"); + config.put("user", "stianst@gmail.com"); + config.put("password", "ahqsbktqbfhwmhrw"); + config.put("starttls", "true"); + + emailSender = new EmailSender(config); + + emailSender.send("stianst@gmail.com", "TTLS " + System.currentTimeMillis(), "Test body"); + } + + @Test + public void googleSSL() throws MessagingException, IOException { + HashMap config = new HashMap(); + config.put("from", "stianst@gmail.com"); + config.put("host", "smtp.gmail.com"); + config.put("port", "465"); + config.put("auth", "true"); + config.put("user", "stianst@gmail.com"); + config.put("password", "ahqsbktqbfhwmhrw"); + config.put("ssl", "true"); + + emailSender = new EmailSender(config); + + emailSender.send("stianst@gmail.com", "SSL " + System.currentTimeMillis(), "Test body"); + } + }