diff --git a/app/server/appsmith-plugins/smtpPlugin/src/main/java/com/external/plugins/SmtpPlugin.java b/app/server/appsmith-plugins/smtpPlugin/src/main/java/com/external/plugins/SmtpPlugin.java index 403ccd9c20..0023c17d20 100644 --- a/app/server/appsmith-plugins/smtpPlugin/src/main/java/com/external/plugins/SmtpPlugin.java +++ b/app/server/appsmith-plugins/smtpPlugin/src/main/java/com/external/plugins/SmtpPlugin.java @@ -205,8 +205,6 @@ public class SmtpPlugin extends BasePlugin { Properties prop = new Properties(); prop.put("mail.transport.protocol", "smtp"); - prop.put("mail.smtp.auth", true); - prop.put("mail.smtp.starttls.enable", "true"); prop.put("mail.smtp.host", endpoint.getHost()); Long port = (endpoint.getPort() == null || endpoint.getPort() < 0) ? 25 : endpoint.getPort(); prop.put("mail.smtp.port", String.valueOf(port)); @@ -218,6 +216,10 @@ public class SmtpPlugin extends BasePlugin { && StringUtils.hasText(authentication.getUsername()) && StringUtils.hasText(authentication.getPassword())) { + // Set authentication specific properties only when credentials are provided + prop.put("mail.smtp.auth", "true"); + prop.put("mail.smtp.starttls.enable", "true"); + String username = authentication.getUsername(); String password = authentication.getPassword(); @@ -228,6 +230,7 @@ public class SmtpPlugin extends BasePlugin { } }); } else { + // For non-authenticated SMTP servers prop.put("mail.smtp.auth", "false"); session = Session.getInstance(prop); } diff --git a/app/server/appsmith-plugins/smtpPlugin/src/test/java/com/external/plugins/SmtpPluginTest.java b/app/server/appsmith-plugins/smtpPlugin/src/test/java/com/external/plugins/SmtpPluginTest.java index 3b95047aee..b539b8ad07 100644 --- a/app/server/appsmith-plugins/smtpPlugin/src/test/java/com/external/plugins/SmtpPluginTest.java +++ b/app/server/appsmith-plugins/smtpPlugin/src/test/java/com/external/plugins/SmtpPluginTest.java @@ -37,6 +37,7 @@ import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.doNothing; @@ -145,6 +146,15 @@ public class SmtpPluginTest { DatasourceConfiguration noAuthDatasourceConfiguration = createDatasourceConfiguration(); noAuthDatasourceConfiguration.setAuthentication(null); // No authentication + // First create the session and verify its properties + Session session = + pluginExecutor.datasourceCreate(noAuthDatasourceConfiguration).block(); + assertNotNull(session); + assertEquals("false", session.getProperties().getProperty("mail.smtp.auth")); + // Verify STARTTLS is not enabled when there's no authentication + assertNull(session.getProperties().getProperty("mail.smtp.starttls.enable")); + + // Then test the datasource connection Mono testDatasourceMono = pluginExecutor.testDatasource(noAuthDatasourceConfiguration); StepVerifier.create(testDatasourceMono)