Pārlūkot izejas kodu

issue#728 (#746)

The mailSender in PasswordAuthentication() and setFrom() may not be the same in actual use, and it's best to set it up separately. please add a example about this.
LiemLin 5 gadi atpakaļ
vecāks
revīzija
78d4ef9662

+ 7 - 1
escheduler-alert/src/main/java/cn/escheduler/alert/utils/Constants.java

@@ -47,11 +47,15 @@ public class Constants {
 
     public static final String MAIL_SENDER = "mail.sender";
 
+    public static final String MAIL_USER = "mail.user";
+
     public static final String MAIL_PASSWD = "mail.passwd";
 
     public static final String XLS_FILE_PATH = "xls.file.path";
 
-    public static final String MAIL_HOST = "mail.host";
+    public static final String MAIL_HOST = "mail.smtp.host";
+
+    public static final String MAIL_PORT = "mail.smtp.port";
 
     public static final String MAIL_SMTP_AUTH = "mail.smtp.auth";
 
@@ -61,6 +65,8 @@ public class Constants {
 
     public static final String MAIL_SMTP_SSL_ENABLE = "mail.smtp.ssl.enable";
 
+    public static final String MAIL_SMTP_SSL_TRUST="mail.smtp.ssl.trust";
+
     public static final String TEXT_HTML_CHARSET_UTF_8 = "text/html;charset=utf-8";
 
     public static final String STRING_TRUE = "true";

+ 35 - 30
escheduler-alert/src/main/java/cn/escheduler/alert/utils/MailUtils.java

@@ -56,6 +56,8 @@ public class MailUtils {
 
     public static final String mailSender = getString(Constants.MAIL_SENDER);
 
+    public static final String mailUser = getString(Constants.MAIL_USER);
+
     public static final String mailPasswd = getString(Constants.MAIL_PASSWD);
 
     public static final Boolean mailUseStartTLS = getBoolean(Constants.MAIL_SMTP_STARTTLS_ENABLE);
@@ -68,6 +70,8 @@ public class MailUtils {
 
     public static final String sslEnable = getString(Constants.MAIL_SMTP_SSL_ENABLE);
 
+    public static final String sslTrust = getString(Constants.MAIL_SMTP_SSL_TRUST);
+
     private static Template MAIL_TEMPLATE;
 
     static {
@@ -126,16 +130,10 @@ public class MailUtils {
             HtmlEmail email = new HtmlEmail();
 
             try {
-                // set the SMTP sending server, 163 as follows: "smtp.163.com"
-                email.setHostName(mailServerHost);
-                email.setSmtpPort(mailServerPort);
-                //set charset
+                Session session = getSession();
+                email.setMailSession(session);
+                email.setFrom(mailSender);
                 email.setCharset(Constants.UTF_8);
-                // TLS verification
-                email.setTLS(Boolean.valueOf(starttlsEnable));
-
-                // SSL verification
-                email.setSSL(Boolean.valueOf(sslEnable));
                 if (CollectionUtils.isNotEmpty(receivers)){
                     // receivers mail
                     for (String receiver : receivers) {
@@ -286,23 +284,11 @@ public class MailUtils {
 //        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
 //        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
 
-        Properties props = new Properties();
-        props.setProperty(Constants.MAIL_HOST, mailServerHost);
-        props.setProperty(Constants.MAIL_SMTP_AUTH, Constants.STRING_TRUE);
-        props.setProperty(Constants.MAIL_TRANSPORT_PROTOCOL, mailProtocol);
-        props.setProperty(Constants.MAIL_SMTP_STARTTLS_ENABLE, starttlsEnable);
-        props.setProperty("mail.smtp.ssl.enable", sslEnable);
-        Authenticator auth = new Authenticator() {
-            @Override
-            protected PasswordAuthentication getPasswordAuthentication() {
-                // mail username and password
-                return new PasswordAuthentication(mailSender, mailPasswd);
-            }
-        };
         // 1. The first step in creating mail: creating session
-        Session session = Session.getInstance(props, auth);
+        Session session = getSession();
         // Setting debug mode, can be turned off
         session.setDebug(false);
+
         // 2. creating mail: Creating a MimeMessage
         MimeMessage msg = new MimeMessage(session);
         // 3. set sender
@@ -314,6 +300,32 @@ public class MailUtils {
         return msg;
     }
 
+    /**
+     * get session
+     * @return
+     */
+    private static Session getSession() {
+        Properties props = new Properties();
+        props.setProperty(Constants.MAIL_HOST, mailServerHost);
+        props.setProperty(Constants.MAIL_PORT, String.valueOf(mailServerPort));
+        props.setProperty(Constants.MAIL_SMTP_AUTH, Constants.STRING_TRUE);
+        props.setProperty(Constants.MAIL_TRANSPORT_PROTOCOL, mailProtocol);
+        props.setProperty(Constants.MAIL_SMTP_STARTTLS_ENABLE, starttlsEnable);
+        props.setProperty(Constants.MAIL_SMTP_SSL_ENABLE, sslEnable);
+        props.setProperty(Constants.MAIL_SMTP_SSL_TRUST, sslTrust);
+
+        Authenticator auth = new Authenticator() {
+            @Override
+            protected PasswordAuthentication getPasswordAuthentication() {
+                // mail username and password
+                return new PasswordAuthentication(mailUser, mailPasswd);
+            }
+        };
+
+        Session session = Session.getInstance(props, auth);
+        return session;
+    }
+
     /**
      *
      * @param receiversCc
@@ -370,13 +382,6 @@ public class MailUtils {
      * @throws EmailException
      */
     private static Map<String, Object> getStringObjectMap(String title, String content, ShowType showType, Map<String, Object> retMap, HtmlEmail email) throws EmailException {
-        // sender's mailbox
-        email.setFrom(mailSender, mailSender);
-        /**
-         * if you need authentication information, set authentication: username-password.
-         * The registered name and password of the sender on the mail server respectively
-         */
-        email.setAuthentication(mailSender, mailPasswd);
 
         /**
          * the subject of the message to be sent

+ 7 - 5
escheduler-alert/src/main/resources/alert.properties

@@ -3,15 +3,17 @@ alert.type=EMAIL
 
 # mail server configuration
 mail.protocol=SMTP
-mail.server.host=smtp.exmail.qq.com
+mail.server.host=xxx.xxx.com
 mail.server.port=25
-mail.sender=xxxxxxx
-mail.passwd=xxxxxxx
+mail.sender=xxx@xxx.com
+mail.user=xxx@xxx.com
+mail.passwd=111111
 
 # TLS
-mail.smtp.starttls.enable=false
+mail.smtp.starttls.enable=true
 # SSL
-mail.smtp.ssl.enable=true
+mail.smtp.ssl.enable=false
+mail.smtp.ssl.trust=xxx.xxx.com
 
 #xls file path,need create if not exist
 xls.file.path=/tmp/xls