keycloak-developers

Details

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 6fd0907..872f1fe 100755
--- a/services/src/main/java/org/keycloak/services/email/EmailSender.java
+++ b/services/src/main/java/org/keycloak/services/email/EmailSender.java
@@ -22,6 +22,7 @@
 package org.keycloak.services.email;
 
 import java.net.URI;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
@@ -52,20 +53,15 @@ public class EmailSender {
 
     private Properties properties;
 
-    public EmailSender() {
+    public EmailSender(Map<String, String> config) {
         properties = new Properties();
-        for (Entry<Object, Object> e : System.getProperties().entrySet()) {
-            String key = (String) e.getKey();
-            if (key.startsWith("keycloak.mail.smtp.")) {
-                key = key.replace("keycloak.mail.smtp.", "mail.smtp.");
-                properties.put(key, e.getValue());
-            }
+        for (Entry<String, String> e : config.entrySet()) {
+            properties.put("mail.smtp." + e.getKey(), e.getValue());
         }
     }
 
-    public void send(String address, String subject, String body) throws AddressException, MessagingException {
-
-        Session session = Session.getDefaultInstance(properties);
+    public void send(String address, String subject, String body) throws MessagingException {
+        Session session = Session.getInstance(properties);
 
         Message msg = new MimeMessage(session);
         msg.setFrom(new InternetAddress(properties.getProperty("mail.smtp.from")));
diff --git a/services/src/main/java/org/keycloak/services/resources/flows/FormFlows.java b/services/src/main/java/org/keycloak/services/resources/flows/FormFlows.java
index fe924fb..68df5a9 100755
--- a/services/src/main/java/org/keycloak/services/resources/flows/FormFlows.java
+++ b/services/src/main/java/org/keycloak/services/resources/flows/FormFlows.java
@@ -89,7 +89,7 @@ public class FormFlows {
             case UPDATE_PASSWORD:
                 return forwardToActionForm(Pages.LOGIN_UPDATE_PASSWORD, Messages.ACTION_WARN_PASSWD);
             case VERIFY_EMAIL:
-                new EmailSender().sendEmailVerification(userModel, realm, accessCode, uriInfo);
+                new EmailSender(realm.getSmtpConfig()).sendEmailVerification(userModel, realm, accessCode, uriInfo);
                 return forwardToActionForm(Pages.LOGIN_VERIFY_EMAIL, Messages.ACTION_WARN_EMAIL);
             default:
                 return Response.serverError().build();
diff --git a/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java b/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
index eeed370..869a477 100755
--- a/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
+++ b/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
@@ -260,7 +260,7 @@ public class RequiredActionsService {
         accessCode.setRequiredActions(requiredActions);
         accessCode.setExpiration(System.currentTimeMillis() / 1000 + realm.getAccessCodeLifespanUserAction());
 
-        new EmailSender().sendPasswordReset(user, realm, accessCode, uriInfo);
+        new EmailSender(realm.getSmtpConfig()).sendPasswordReset(user, realm, accessCode, uriInfo);
 
         return Flows.forms(realm, request, uriInfo).setError("emailSent").setErrorType(FormFlows.MessageType.SUCCESS)
                 .forwardToPasswordReset();
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 08354dd..720af17 100644
--- a/services/src/test/java/org/keycloak/services/email/EmailSenderTest.java
+++ b/services/src/test/java/org/keycloak/services/email/EmailSenderTest.java
@@ -3,6 +3,7 @@ package org.keycloak.services.email;
 import java.io.IOException;
 import java.lang.Thread.UncaughtExceptionHandler;
 import java.net.SocketException;
+import java.util.HashMap;
 
 import javax.mail.MessagingException;
 import javax.mail.internet.AddressException;
@@ -19,6 +20,7 @@ import com.icegreen.greenmail.util.ServerSetup;
 public class EmailSenderTest {
 
     private GreenMail greenMail;
+    private EmailSender emailSender;
 
     @Before
     public void before() {
@@ -27,9 +29,12 @@ public class EmailSenderTest {
         greenMail = new GreenMail(setup);
         greenMail.start();
 
-        System.setProperty("keycloak.mail.smtp.from", "auto@keycloak.org");
-        System.setProperty("keycloak.mail.smtp.host", "localhost");
-        System.setProperty("keycloak.mail.smtp.port", "3025");
+        HashMap<String,String> config = new HashMap<String, String>();
+        config.put("from", "auto@keycloak.org");
+        config.put("host", "localhost");
+        config.put("port", "3025");
+
+        emailSender = new EmailSender(config);
     }
 
     @After
@@ -53,7 +58,6 @@ public class EmailSenderTest {
 
     @Test
     public void sendMail() throws AddressException, MessagingException, IOException {
-        EmailSender emailSender = new EmailSender();
         emailSender.send("test@test.com", "Test subject", "Test body");
 
         MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/GreenMailRule.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/GreenMailRule.java
index 7954942..386ddb7 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/GreenMailRule.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/GreenMailRule.java
@@ -41,23 +41,8 @@ public class GreenMailRule extends ExternalResource {
 
     private GreenMail greenMail;
 
-    private Properties originalProperties = new Properties();
-
     @Override
     protected void before() throws Throwable {
-        Iterator<Entry<Object, Object>> itr = System.getProperties().entrySet().iterator();
-        while (itr.hasNext()) {
-            Entry<Object, Object> e = itr.next();
-            if (((String) e.getKey()).startsWith("keycloak.mail")) {
-                originalProperties.put(e.getKey(), e.getValue());
-                itr.remove();
-            }
-        }
-        
-        System.setProperty("keycloak.mail.smtp.from", "auto@keycloak.org");
-        System.setProperty("keycloak.mail.smtp.host", "localhost");
-        System.setProperty("keycloak.mail.smtp.port", "3025");
-        
         ServerSetup setup = new ServerSetup(3025, "localhost", "smtp");
 
         greenMail = new GreenMail(setup);
@@ -81,11 +66,6 @@ public class GreenMailRule extends ExternalResource {
 
             greenMail.stop();
         }
-
-        System.getProperties().remove("keycloak.mail.smtp.from");
-        System.getProperties().remove("keycloak.mail.smtp.host");
-        System.getProperties().remove("keycloak.mail.smtp.port");
-        System.getProperties().putAll(originalProperties);
     }
 
     public MimeMessage[] getReceivedMessages() {
diff --git a/testsuite/integration/src/test/resources/testrealm.json b/testsuite/integration/src/test/resources/testrealm.json
index 161f11e..f4ef0c5 100755
--- a/testsuite/integration/src/test/resources/testrealm.json
+++ b/testsuite/integration/src/test/resources/testrealm.json
@@ -16,6 +16,11 @@
     "requiredApplicationCredentials": [ "password" ],
     "requiredOAuthClientCredentials": [ "password" ],
     "defaultRoles": [ "user" ],
+    "smtpServer": {
+        "from": "auto@keycloak.org",
+        "host": "localhost",
+        "port":"3025"
+    },
     "users" : [
         {
             "username" : "test-user@localhost",