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 69f81748d3fe..403ccd9c2087 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 @@ -212,15 +212,25 @@ public Mono datasourceCreate(DatasourceConfiguration datasourceConfigur prop.put("mail.smtp.port", String.valueOf(port)); prop.put("mail.smtp.ssl.trust", endpoint.getHost()); - String username = authentication.getUsername(); - String password = authentication.getPassword(); + Session session; - Session session = Session.getInstance(prop, new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); + if (authentication != null + && StringUtils.hasText(authentication.getUsername()) + && StringUtils.hasText(authentication.getPassword())) { + + String username = authentication.getUsername(); + String password = authentication.getPassword(); + + session = Session.getInstance(prop, new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } else { + prop.put("mail.smtp.auth", "false"); + session = Session.getInstance(prop); + } return Mono.just(session); } @@ -248,14 +258,6 @@ public Set validateDatasource(DatasourceConfiguration datasourceConfigur invalids.add(SMTPErrorMessages.DS_MISSING_HOST_ADDRESS_ERROR_MSG); } } - - DBAuth authentication = (DBAuth) datasourceConfiguration.getAuthentication(); - if (authentication == null - || !StringUtils.hasText(authentication.getUsername()) - || !StringUtils.hasText(authentication.getPassword())) { - invalids.add(new AppsmithPluginException(AppsmithPluginError.PLUGIN_AUTHENTICATION_ERROR).getMessage()); - } - return invalids; } @@ -264,6 +266,7 @@ public Mono testDatasource(Session connection) { log.debug(Thread.currentThread().getName() + ": testDatasource() called for SMTP plugin."); return Mono.fromCallable(() -> { Set invalids = new HashSet<>(); + try { Transport transport = connection.getTransport(); if (transport != null) { 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 2da564b02d91..3b95047aeebb 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 @@ -1,6 +1,5 @@ package com.external.plugins; -import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginError; import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginException; import com.appsmith.external.helpers.PluginUtils; import com.appsmith.external.models.ActionConfiguration; @@ -59,12 +58,23 @@ public class SmtpPluginTest { .withCommand("bin/maildev --base-pathname /maildev --incoming-user " + username + " --incoming-pass " + password + " -s 25"); + @Container + public static final GenericContainer smtpWithoutAuth = new GenericContainer( + DockerImageName.parse("maildev/maildev")) + .withExposedPorts(1025) + .withCommand("bin/maildev --base-pathname /maildev --smtp-port 1025 --incoming-user '' --incoming-pass ''"); + private final SmtpPlugin.SmtpPluginExecutor pluginExecutor = new SmtpPlugin.SmtpPluginExecutor(); @BeforeAll public static void setup() { - host = smtp.getContainerIpAddress(); - port = Long.valueOf(smtp.getFirstMappedPort()); + // Initialize SMTP connection with default configuration (can be changed per test) + configureSmtpConnection(smtp); // Default + } + + private static void configureSmtpConnection(GenericContainer container) { + host = container.getContainerIpAddress(); + port = Long.valueOf(container.getFirstMappedPort()); } private DatasourceConfiguration createDatasourceConfiguration() { @@ -130,13 +140,21 @@ public void testInvalidPort() { } @Test - public void testNullAuthentication() { - DatasourceConfiguration invalidDatasourceConfiguration = createDatasourceConfiguration(); - invalidDatasourceConfiguration.setAuthentication(null); + public void testConnectionWithoutAuth() { + configureSmtpConnection(smtpWithoutAuth); + DatasourceConfiguration noAuthDatasourceConfiguration = createDatasourceConfiguration(); + noAuthDatasourceConfiguration.setAuthentication(null); // No authentication - assertEquals( - Set.of(new AppsmithPluginException(AppsmithPluginError.PLUGIN_AUTHENTICATION_ERROR).getMessage()), - pluginExecutor.validateDatasource(invalidDatasourceConfiguration)); + Mono testDatasourceMono = pluginExecutor.testDatasource(noAuthDatasourceConfiguration); + + StepVerifier.create(testDatasourceMono) + .assertNext(datasourceTestResult -> { + assertNotNull(datasourceTestResult); + assertTrue(datasourceTestResult.isSuccess()); + assertTrue(datasourceTestResult.getInvalids().isEmpty()); + }) + .verifyComplete(); + configureSmtpConnection(smtp); } @Test