From eea397a0dd422a9908dade30b61d8817f18649cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=BA=E9=98=B3?= Date: Tue, 21 Mar 2023 13:59:01 +0800 Subject: [PATCH] cherry-pick [Fix][Alert] Fix when auth is false and user || pwd null can't send email excection #13761 --- .../plugin/alert/email/MailSender.java | 11 +++-- .../plugin/alert/email/MailUtilsTest.java | 40 ++++++++++++++++--- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-email/src/main/java/org/apache/dolphinscheduler/plugin/alert/email/MailSender.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-email/src/main/java/org/apache/dolphinscheduler/plugin/alert/email/MailSender.java index de250cb07f..f8585be8f0 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-email/src/main/java/org/apache/dolphinscheduler/plugin/alert/email/MailSender.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-email/src/main/java/org/apache/dolphinscheduler/plugin/alert/email/MailSender.java @@ -22,6 +22,7 @@ import static java.util.Objects.requireNonNull; import org.apache.dolphinscheduler.alert.api.AlertConstants; import org.apache.dolphinscheduler.alert.api.AlertResult; import org.apache.dolphinscheduler.alert.api.ShowType; +import org.apache.dolphinscheduler.common.constants.Constants; import org.apache.dolphinscheduler.plugin.alert.email.exception.AlertEmailException; import org.apache.dolphinscheduler.plugin.alert.email.template.AlertTemplate; import org.apache.dolphinscheduler.plugin.alert.email.template.DefaultHTMLTemplate; @@ -104,12 +105,14 @@ public final class MailSender { requireNonNull(mailSenderEmail, MailParamsConstants.NAME_MAIL_SENDER + mustNotNull); enableSmtpAuth = config.get(MailParamsConstants.NAME_MAIL_SMTP_AUTH); - mailUser = config.get(MailParamsConstants.NAME_MAIL_USER); - requireNonNull(mailUser, MailParamsConstants.NAME_MAIL_USER + mustNotNull); - mailPasswd = config.get(MailParamsConstants.NAME_MAIL_PASSWD); - requireNonNull(mailPasswd, MailParamsConstants.NAME_MAIL_PASSWD + mustNotNull); + + // Needs to check user && password only if enableSmtpAuth is true + if (Constants.STRING_TRUE.equals(enableSmtpAuth)) { + requireNonNull(mailUser, MailParamsConstants.NAME_MAIL_USER + mustNotNull); + requireNonNull(mailPasswd, MailParamsConstants.NAME_MAIL_PASSWD + mustNotNull); + } mailUseStartTLS = config.get(MailParamsConstants.NAME_MAIL_SMTP_STARTTLS_ENABLE); requireNonNull(mailUseStartTLS, MailParamsConstants.NAME_MAIL_SMTP_STARTTLS_ENABLE + mustNotNull); diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-email/src/test/java/org/apache/dolphinscheduler/plugin/alert/email/MailUtilsTest.java b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-email/src/test/java/org/apache/dolphinscheduler/plugin/alert/email/MailUtilsTest.java index b71d21d7f8..63358b2d7d 100644 --- a/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-email/src/test/java/org/apache/dolphinscheduler/plugin/alert/email/MailUtilsTest.java +++ b/dolphinscheduler-alert/dolphinscheduler-alert-plugins/dolphinscheduler-alert-email/src/test/java/org/apache/dolphinscheduler/plugin/alert/email/MailUtilsTest.java @@ -29,20 +29,21 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Ignore("The test case makes no sense") +@Disabled("The test case makes no sense") public class MailUtilsTest { private static final Logger logger = LoggerFactory.getLogger(MailUtilsTest.class); static MailSender mailSender; private static Map emailConfig = new HashMap<>(); private static AlertTemplate alertTemplate; - @BeforeClass + @BeforeAll public static void initEmailConfig() { emailConfig.put(MailParamsConstants.NAME_MAIL_PROTOCOL, "smtp"); emailConfig.put(MailParamsConstants.NAME_MAIL_SMTP_HOST, "xxx.xxx.com"); @@ -80,6 +81,35 @@ public class MailUtilsTest { content); } + @Test + void testAuthCheck() { + String title = "Auth Exception"; + String content = list2String(); + + // test auth false and user && pwd null will pass + emailConfig.put(MailParamsConstants.NAME_MAIL_SMTP_AUTH, "false"); + emailConfig.put(MailParamsConstants.NAME_MAIL_USER, null); + emailConfig.put(MailParamsConstants.NAME_MAIL_PASSWD, null); + mailSender = new MailSender(emailConfig); + mailSender.sendMails(title, content); + + try { + // test auth true and user null will throw exception + emailConfig.put(MailParamsConstants.NAME_MAIL_SMTP_AUTH, "true"); + emailConfig.put(MailParamsConstants.NAME_MAIL_USER, null); + mailSender = new MailSender(emailConfig); + mailSender.sendMails(title, content); + } catch (Exception e) { + Assertions.assertTrue(e.getMessage().contains(MailParamsConstants.NAME_MAIL_USER)); + } + + // test auth true and user && pwd not null will pass + emailConfig.put(MailParamsConstants.NAME_MAIL_USER, "user"); + emailConfig.put(MailParamsConstants.NAME_MAIL_PASSWD, "passwd"); + mailSender = new MailSender(emailConfig); + mailSender.sendMails(title, content); + } + public String list2String() { LinkedHashMap map1 = new LinkedHashMap<>();