¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.common.mail.utils; |
| | | |
| | | import cn.hutool.core.util.CharsetUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.setting.Setting; |
| | | |
| | | import java.io.Serializable; |
| | | import java.nio.charset.Charset; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.Properties; |
| | | |
| | | /** |
| | | * é®ä»¶è´¦æ·å¯¹è±¡ |
| | | * |
| | | * @author Luxiaolei |
| | | */ |
| | | public class MailAccount implements Serializable { |
| | | private static final long serialVersionUID = -6937313421815719204L; |
| | | |
| | | private static final String MAIL_PROTOCOL = "mail.transport.protocol"; |
| | | private static final String SMTP_HOST = "mail.smtp.host"; |
| | | private static final String SMTP_PORT = "mail.smtp.port"; |
| | | private static final String SMTP_AUTH = "mail.smtp.auth"; |
| | | private static final String SMTP_TIMEOUT = "mail.smtp.timeout"; |
| | | private static final String SMTP_CONNECTION_TIMEOUT = "mail.smtp.connectiontimeout"; |
| | | private static final String SMTP_WRITE_TIMEOUT = "mail.smtp.writetimeout"; |
| | | |
| | | // SSL |
| | | private static final String STARTTLS_ENABLE = "mail.smtp.starttls.enable"; |
| | | private static final String SSL_ENABLE = "mail.smtp.ssl.enable"; |
| | | private static final String SSL_PROTOCOLS = "mail.smtp.ssl.protocols"; |
| | | private static final String SOCKET_FACTORY = "mail.smtp.socketFactory.class"; |
| | | private static final String SOCKET_FACTORY_FALLBACK = "mail.smtp.socketFactory.fallback"; |
| | | private static final String SOCKET_FACTORY_PORT = "smtp.socketFactory.port"; |
| | | |
| | | // System Properties |
| | | private static final String SPLIT_LONG_PARAMS = "mail.mime.splitlongparameters"; |
| | | //private static final String ENCODE_FILE_NAME = "mail.mime.encodefilename"; |
| | | //private static final String CHARSET = "mail.mime.charset"; |
| | | |
| | | // å
¶ä» |
| | | private static final String MAIL_DEBUG = "mail.debug"; |
| | | |
| | | public static final String[] MAIL_SETTING_PATHS = new String[]{"config/mail.setting", "config/mailAccount.setting", "mail.setting"}; |
| | | |
| | | /** |
| | | * SMTPæå¡å¨åå |
| | | */ |
| | | private String host; |
| | | /** |
| | | * SMTPæå¡ç«¯å£ |
| | | */ |
| | | private Integer port; |
| | | /** |
| | | * æ¯å¦éè¦ç¨æ·åå¯ç éªè¯ |
| | | */ |
| | | private Boolean auth; |
| | | /** |
| | | * ç¨æ·å |
| | | */ |
| | | private String user; |
| | | /** |
| | | * å¯ç |
| | | */ |
| | | private String pass; |
| | | /** |
| | | * åéæ¹ï¼éµå¾ªRFC-822æ å |
| | | */ |
| | | private String from; |
| | | |
| | | /** |
| | | * æ¯å¦æå¼è°è¯æ¨¡å¼ï¼è°è¯æ¨¡å¼ä¼æ¾ç¤ºä¸é®ä»¶æå¡å¨éä¿¡è¿ç¨ï¼é»è®¤ä¸å¼å¯ |
| | | */ |
| | | private boolean debug; |
| | | /** |
| | | * ç¼ç ç¨äºç¼ç é®ä»¶æ£æååéäººãæ¶ä»¶äººç䏿 |
| | | */ |
| | | private Charset charset = CharsetUtil.CHARSET_UTF_8; |
| | | /** |
| | | * 对äºè¶
é¿åæ°æ¯å¦åå为å¤ä»½ï¼é»è®¤ä¸ºfalseï¼å½å
é®ç®±é件䏿¯æååçéä»¶åï¼ |
| | | */ |
| | | private boolean splitlongparameters = false; |
| | | /** |
| | | * å¯¹äºæä»¶åæ¯å¦ä½¿ç¨{@link #charset}ç¼ç ï¼é»è®¤ä¸º {@code true} |
| | | */ |
| | | private boolean encodefilename = true; |
| | | |
| | | /** |
| | | * ä½¿ç¨ STARTTLSå®å
¨è¿æ¥ï¼STARTTLSæ¯å¯¹çº¯ææ¬éä¿¡åè®®çæ©å±ãå®å°çº¯ææ¬è¿æ¥å级为å å¯è¿æ¥ï¼TLSæSSLï¼ï¼ è䏿¯ä½¿ç¨ä¸ä¸ªåç¬çå å¯é信端å£ã |
| | | */ |
| | | private boolean starttlsEnable = false; |
| | | /** |
| | | * ä½¿ç¨ SSLå®å
¨è¿æ¥ |
| | | */ |
| | | private Boolean sslEnable; |
| | | |
| | | /** |
| | | * SSLåè®®ï¼å¤ä¸ªåè®®ç¨ç©ºæ ¼åé |
| | | */ |
| | | private String sslProtocols; |
| | | |
| | | /** |
| | | * æå®å®ç°javax.net.SocketFactoryæ¥å£çç±»çåç§°,è¿ä¸ªç±»å°è¢«ç¨äºå建SMTPç奿¥å |
| | | */ |
| | | private String socketFactoryClass = "javax.net.ssl.SSLSocketFactory"; |
| | | /** |
| | | * å¦æè®¾ç½®ä¸ºtrue,æªè½å建ä¸ä¸ªå¥æ¥åä½¿ç¨æå®ç奿¥åå·¥åç±»å°å¯¼è´ä½¿ç¨java.net.Socketå建ç奿¥åç±», é»è®¤å¼ä¸ºtrue |
| | | */ |
| | | private boolean socketFactoryFallback; |
| | | /** |
| | | * æå®ç端å£è¿æ¥å°å¨ä½¿ç¨æå®ç奿¥åå·¥åãå¦ææ²¡æè®¾ç½®,å°ä½¿ç¨é»è®¤ç«¯å£ |
| | | */ |
| | | private int socketFactoryPort = 465; |
| | | |
| | | /** |
| | | * SMTPè¶
æ¶æ¶é¿ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | */ |
| | | private long timeout; |
| | | /** |
| | | * Socketè¿æ¥è¶
æ¶å¼ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | */ |
| | | private long connectionTimeout; |
| | | /** |
| | | * Socketååºè¶
æ¶å¼ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | */ |
| | | private long writeTimeout; |
| | | |
| | | /** |
| | | * èªå®ä¹çå
¶ä»å±æ§ï¼æ¤èªå®ä¹å±æ§ä¼è¦çé»è®¤å±æ§ |
| | | */ |
| | | private final Map<String, Object> customProperty = new HashMap<>(); |
| | | |
| | | // -------------------------------------------------------------- Constructor start |
| | | |
| | | /** |
| | | * æé ,ææåæ°éèªè¡å®ä¹æä¿æé»è®¤å¼ |
| | | */ |
| | | public MailAccount() { |
| | | } |
| | | |
| | | /** |
| | | * æé |
| | | * |
| | | * @param settingPath é
ç½®æä»¶è·¯å¾ |
| | | */ |
| | | public MailAccount(String settingPath) { |
| | | this(new Setting(settingPath)); |
| | | } |
| | | |
| | | /** |
| | | * æé |
| | | * |
| | | * @param setting é
ç½®æä»¶ |
| | | */ |
| | | public MailAccount(Setting setting) { |
| | | setting.toBean(this); |
| | | } |
| | | |
| | | // -------------------------------------------------------------- Constructor end |
| | | |
| | | /** |
| | | * è·å¾SMTPæå¡å¨åå |
| | | * |
| | | * @return SMTPæå¡å¨åå |
| | | */ |
| | | public String getHost() { |
| | | return host; |
| | | } |
| | | |
| | | /** |
| | | * 设置SMTPæå¡å¨åå |
| | | * |
| | | * @param host SMTPæå¡å¨åå |
| | | * @return this |
| | | */ |
| | | public MailAccount setHost(String host) { |
| | | this.host = host; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·å¾SMTPæå¡ç«¯å£ |
| | | * |
| | | * @return SMTPæå¡ç«¯å£ |
| | | */ |
| | | public Integer getPort() { |
| | | return port; |
| | | } |
| | | |
| | | /** |
| | | * 设置SMTPæå¡ç«¯å£ |
| | | * |
| | | * @param port SMTPæå¡ç«¯å£ |
| | | * @return this |
| | | */ |
| | | public MailAccount setPort(Integer port) { |
| | | this.port = port; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦éè¦ç¨æ·åå¯ç éªè¯ |
| | | * |
| | | * @return æ¯å¦éè¦ç¨æ·åå¯ç éªè¯ |
| | | */ |
| | | public Boolean isAuth() { |
| | | return auth; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¯å¦éè¦ç¨æ·åå¯ç éªè¯ |
| | | * |
| | | * @param isAuth æ¯å¦éè¦ç¨æ·åå¯ç éªè¯ |
| | | * @return this |
| | | */ |
| | | public MailAccount setAuth(boolean isAuth) { |
| | | this.auth = isAuth; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·å |
| | | * |
| | | * @return ç¨æ·å |
| | | */ |
| | | public String getUser() { |
| | | return user; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®ç¨æ·å |
| | | * |
| | | * @param user ç¨æ·å |
| | | * @return this |
| | | */ |
| | | public MailAccount setUser(String user) { |
| | | this.user = user; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·åå¯ç |
| | | * |
| | | * @return å¯ç |
| | | */ |
| | | public String getPass() { |
| | | return pass; |
| | | } |
| | | |
| | | /** |
| | | * 设置å¯ç |
| | | * |
| | | * @param pass å¯ç |
| | | * @return this |
| | | */ |
| | | public MailAccount setPass(String pass) { |
| | | this.pass = pass; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·ååéæ¹ï¼éµå¾ªRFC-822æ å |
| | | * |
| | | * @return åéæ¹ï¼éµå¾ªRFC-822æ å |
| | | */ |
| | | public String getFrom() { |
| | | return from; |
| | | } |
| | | |
| | | /** |
| | | * 设置åéæ¹ï¼éµå¾ªRFC-822æ å<br> |
| | | * å件人å¯ä»¥æ¯ä»¥ä¸å½¢å¼ï¼ |
| | | * |
| | | * <pre> |
| | | * 1. user@xxx.xx |
| | | * 2. name <user@xxx.xx> |
| | | * </pre> |
| | | * |
| | | * @param from åéæ¹ï¼éµå¾ªRFC-822æ å |
| | | * @return this |
| | | */ |
| | | public MailAccount setFrom(String from) { |
| | | this.from = from; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦æå¼è°è¯æ¨¡å¼ï¼è°è¯æ¨¡å¼ä¼æ¾ç¤ºä¸é®ä»¶æå¡å¨éä¿¡è¿ç¨ï¼é»è®¤ä¸å¼å¯ |
| | | * |
| | | * @return æ¯å¦æå¼è°è¯æ¨¡å¼ï¼è°è¯æ¨¡å¼ä¼æ¾ç¤ºä¸é®ä»¶æå¡å¨éä¿¡è¿ç¨ï¼é»è®¤ä¸å¼å¯ |
| | | * @since 4.0.2 |
| | | */ |
| | | public boolean isDebug() { |
| | | return debug; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¯å¦æå¼è°è¯æ¨¡å¼ï¼è°è¯æ¨¡å¼ä¼æ¾ç¤ºä¸é®ä»¶æå¡å¨éä¿¡è¿ç¨ï¼é»è®¤ä¸å¼å¯ |
| | | * |
| | | * @param debug æ¯å¦æå¼è°è¯æ¨¡å¼ï¼è°è¯æ¨¡å¼ä¼æ¾ç¤ºä¸é®ä»¶æå¡å¨éä¿¡è¿ç¨ï¼é»è®¤ä¸å¼å¯ |
| | | * @return this |
| | | * @since 4.0.2 |
| | | */ |
| | | public MailAccount setDebug(boolean debug) { |
| | | this.debug = debug; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·åå符éç¼ç |
| | | * |
| | | * @return ç¼ç ï¼å¯è½ä¸º{@code null} |
| | | */ |
| | | public Charset getCharset() { |
| | | return charset; |
| | | } |
| | | |
| | | /** |
| | | * 设置å符éç¼ç ï¼æ¤é项ä¸ä¼ä¿®æ¹å
¨å±é
ç½®ï¼è¥ä¿®æ¹å
¨å±é
ç½®ï¼è¯·è®¾ç½®æ¤é¡¹ä¸º{@code null}å¹¶è®¾ç½®ï¼ |
| | | * <pre> |
| | | * System.setProperty("mail.mime.charset", charset); |
| | | * </pre> |
| | | * |
| | | * @param charset å符éç¼ç ï¼{@code null} å表示使ç¨å
¨å±è®¾ç½®çé»è®¤ç¼ç ï¼å
¨å±ç¼ç 为mail.mime.charsetç³»ç»å±æ§ |
| | | * @return this |
| | | */ |
| | | public MailAccount setCharset(Charset charset) { |
| | | this.charset = charset; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * 对äºè¶
é¿åæ°æ¯å¦åå为å¤ä»½ï¼é»è®¤ä¸ºfalseï¼å½å
é®ç®±é件䏿¯æååçéä»¶åï¼ |
| | | * |
| | | * @return 对äºè¶
é¿åæ°æ¯å¦åå为å¤ä»½ |
| | | */ |
| | | public boolean isSplitlongparameters() { |
| | | return splitlongparameters; |
| | | } |
| | | |
| | | /** |
| | | * 设置对äºè¶
é¿åæ°æ¯å¦åå为å¤ä»½ï¼é»è®¤ä¸ºfalseï¼å½å
é®ç®±é件䏿¯æååçéä»¶åï¼<br> |
| | | * æ³¨ææ¤é¡¹ä¸ºå
¨å±è®¾ç½®ï¼æ¤é¡¹ä¼è°ç¨ |
| | | * <pre> |
| | | * System.setProperty("mail.mime.splitlongparameters", true) |
| | | * </pre> |
| | | * |
| | | * @param splitlongparameters 对äºè¶
é¿åæ°æ¯å¦åå为å¤ä»½ |
| | | */ |
| | | public void setSplitlongparameters(boolean splitlongparameters) { |
| | | this.splitlongparameters = splitlongparameters; |
| | | } |
| | | |
| | | /** |
| | | * å¯¹äºæä»¶åæ¯å¦ä½¿ç¨{@link #charset}ç¼ç ï¼é»è®¤ä¸º {@code true} |
| | | * |
| | | * @return å¯¹äºæä»¶åæ¯å¦ä½¿ç¨{@link #charset}ç¼ç ï¼é»è®¤ä¸º {@code true} |
| | | * @since 5.7.16 |
| | | */ |
| | | public boolean isEncodefilename() { |
| | | |
| | | return encodefilename; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®å¯¹äºæä»¶åæ¯å¦ä½¿ç¨{@link #charset}ç¼ç ï¼æ¤é项ä¸ä¼ä¿®æ¹å
¨å±é
ç½®<br> |
| | | * 妿æ¤é项设置为{@code false}ï¼åæ¯å¦ç¼ç åå³äºä¸¤ä¸ªç³»ç»å±æ§ï¼ |
| | | * <ul> |
| | | * <li>mail.mime.encodefilename æ¯å¦ç¼ç éä»¶æä»¶å</li> |
| | | * <li>mail.mime.charset ç¼ç æä»¶åçç¼ç </li> |
| | | * </ul> |
| | | * |
| | | * @param encodefilename å¯¹äºæä»¶åæ¯å¦ä½¿ç¨{@link #charset}ç¼ç |
| | | * @since 5.7.16 |
| | | */ |
| | | public void setEncodefilename(boolean encodefilename) { |
| | | this.encodefilename = encodefilename; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ä½¿ç¨ STARTTLSå®å
¨è¿æ¥ï¼STARTTLSæ¯å¯¹çº¯ææ¬éä¿¡åè®®çæ©å±ãå®å°çº¯ææ¬è¿æ¥å级为å å¯è¿æ¥ï¼TLSæSSLï¼ï¼ è䏿¯ä½¿ç¨ä¸ä¸ªåç¬çå å¯é信端å£ã |
| | | * |
| | | * @return æ¯å¦ä½¿ç¨ STARTTLSå®å
¨è¿æ¥ |
| | | */ |
| | | public boolean isStarttlsEnable() { |
| | | return this.starttlsEnable; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¯å¦ä½¿ç¨STARTTLSå®å
¨è¿æ¥ï¼STARTTLSæ¯å¯¹çº¯ææ¬éä¿¡åè®®çæ©å±ãå®å°çº¯ææ¬è¿æ¥å级为å å¯è¿æ¥ï¼TLSæSSLï¼ï¼ è䏿¯ä½¿ç¨ä¸ä¸ªåç¬çå å¯é信端å£ã |
| | | * |
| | | * @param startttlsEnable æ¯å¦ä½¿ç¨STARTTLSå®å
¨è¿æ¥ |
| | | * @return this |
| | | */ |
| | | public MailAccount setStarttlsEnable(boolean startttlsEnable) { |
| | | this.starttlsEnable = startttlsEnable; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ä½¿ç¨ SSLå®å
¨è¿æ¥ |
| | | * |
| | | * @return æ¯å¦ä½¿ç¨ SSLå®å
¨è¿æ¥ |
| | | */ |
| | | public Boolean isSslEnable() { |
| | | return this.sslEnable; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¯å¦ä½¿ç¨SSLå®å
¨è¿æ¥ |
| | | * |
| | | * @param sslEnable æ¯å¦ä½¿ç¨SSLå®å
¨è¿æ¥ |
| | | * @return this |
| | | */ |
| | | public MailAccount setSslEnable(Boolean sslEnable) { |
| | | this.sslEnable = sslEnable; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·åSSLåè®®ï¼å¤ä¸ªåè®®ç¨ç©ºæ ¼åé |
| | | * |
| | | * @return SSLåè®®ï¼å¤ä¸ªåè®®ç¨ç©ºæ ¼åé |
| | | * @since 5.5.7 |
| | | */ |
| | | public String getSslProtocols() { |
| | | return sslProtocols; |
| | | } |
| | | |
| | | /** |
| | | * 设置SSLåè®®ï¼å¤ä¸ªåè®®ç¨ç©ºæ ¼åé |
| | | * |
| | | * @param sslProtocols SSLåè®®ï¼å¤ä¸ªåè®®ç¨ç©ºæ ¼åé |
| | | * @since 5.5.7 |
| | | */ |
| | | public void setSslProtocols(String sslProtocols) { |
| | | this.sslProtocols = sslProtocols; |
| | | } |
| | | |
| | | /** |
| | | * è·åæå®å®ç°javax.net.SocketFactoryæ¥å£çç±»çåç§°,è¿ä¸ªç±»å°è¢«ç¨äºå建SMTPç奿¥å |
| | | * |
| | | * @return æå®å®ç°javax.net.SocketFactoryæ¥å£çç±»çåç§°, è¿ä¸ªç±»å°è¢«ç¨äºå建SMTPç奿¥å |
| | | */ |
| | | public String getSocketFactoryClass() { |
| | | return socketFactoryClass; |
| | | } |
| | | |
| | | /** |
| | | * 设置æå®å®ç°javax.net.SocketFactoryæ¥å£çç±»çåç§°,è¿ä¸ªç±»å°è¢«ç¨äºå建SMTPç奿¥å |
| | | * |
| | | * @param socketFactoryClass æå®å®ç°javax.net.SocketFactoryæ¥å£çç±»çåç§°,è¿ä¸ªç±»å°è¢«ç¨äºå建SMTPç奿¥å |
| | | * @return this |
| | | */ |
| | | public MailAccount setSocketFactoryClass(String socketFactoryClass) { |
| | | this.socketFactoryClass = socketFactoryClass; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * å¦æè®¾ç½®ä¸ºtrue,æªè½å建ä¸ä¸ªå¥æ¥åä½¿ç¨æå®ç奿¥åå·¥åç±»å°å¯¼è´ä½¿ç¨java.net.Socketå建ç奿¥åç±», é»è®¤å¼ä¸ºtrue |
| | | * |
| | | * @return å¦æè®¾ç½®ä¸ºtrue, æªè½å建ä¸ä¸ªå¥æ¥åä½¿ç¨æå®ç奿¥åå·¥åç±»å°å¯¼è´ä½¿ç¨java.net.Socketå建ç奿¥åç±», é»è®¤å¼ä¸ºtrue |
| | | */ |
| | | public boolean isSocketFactoryFallback() { |
| | | return socketFactoryFallback; |
| | | } |
| | | |
| | | /** |
| | | * å¦æè®¾ç½®ä¸ºtrue,æªè½å建ä¸ä¸ªå¥æ¥åä½¿ç¨æå®ç奿¥åå·¥åç±»å°å¯¼è´ä½¿ç¨java.net.Socketå建ç奿¥åç±», é»è®¤å¼ä¸ºtrue |
| | | * |
| | | * @param socketFactoryFallback å¦æè®¾ç½®ä¸ºtrue,æªè½å建ä¸ä¸ªå¥æ¥åä½¿ç¨æå®ç奿¥åå·¥åç±»å°å¯¼è´ä½¿ç¨java.net.Socketå建ç奿¥åç±», é»è®¤å¼ä¸ºtrue |
| | | * @return this |
| | | */ |
| | | public MailAccount setSocketFactoryFallback(boolean socketFactoryFallback) { |
| | | this.socketFactoryFallback = socketFactoryFallback; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·åæå®ç端å£è¿æ¥å°å¨ä½¿ç¨æå®ç奿¥åå·¥åãå¦ææ²¡æè®¾ç½®,å°ä½¿ç¨é»è®¤ç«¯å£ |
| | | * |
| | | * @return æå®ç端å£è¿æ¥å°å¨ä½¿ç¨æå®ç奿¥åå·¥åãå¦ææ²¡æè®¾ç½®,å°ä½¿ç¨é»è®¤ç«¯å£ |
| | | */ |
| | | public int getSocketFactoryPort() { |
| | | return socketFactoryPort; |
| | | } |
| | | |
| | | /** |
| | | * æå®ç端å£è¿æ¥å°å¨ä½¿ç¨æå®ç奿¥åå·¥åãå¦ææ²¡æè®¾ç½®,å°ä½¿ç¨é»è®¤ç«¯å£ |
| | | * |
| | | * @param socketFactoryPort æå®ç端å£è¿æ¥å°å¨ä½¿ç¨æå®ç奿¥åå·¥åãå¦ææ²¡æè®¾ç½®,å°ä½¿ç¨é»è®¤ç«¯å£ |
| | | * @return this |
| | | */ |
| | | public MailAccount setSocketFactoryPort(int socketFactoryPort) { |
| | | this.socketFactoryPort = socketFactoryPort; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * 设置SMTPè¶
æ¶æ¶é¿ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | * |
| | | * @param timeout SMTPè¶
æ¶æ¶é¿ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | * @return this |
| | | * @since 4.1.17 |
| | | */ |
| | | public MailAccount setTimeout(long timeout) { |
| | | this.timeout = timeout; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * 设置Socketè¿æ¥è¶
æ¶å¼ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | * |
| | | * @param connectionTimeout Socketè¿æ¥è¶
æ¶å¼ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | * @return this |
| | | * @since 4.1.17 |
| | | */ |
| | | public MailAccount setConnectionTimeout(long connectionTimeout) { |
| | | this.connectionTimeout = connectionTimeout; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * 设置Socketååºè¶
æ¶å¼ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | * |
| | | * @param writeTimeout Socketååºè¶
æ¶å¼ï¼å使¯«ç§ï¼ç¼ºçå¼ä¸è¶
æ¶ |
| | | * @return this |
| | | * @since 5.8.3 |
| | | */ |
| | | public MailAccount setWriteTimeout(long writeTimeout) { |
| | | this.writeTimeout = writeTimeout; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·åèªå®ä¹å±æ§å表 |
| | | * |
| | | * @return èªå®ä¹åæ°å表 |
| | | * @since 5.6.4 |
| | | */ |
| | | public Map<String, Object> getCustomProperty() { |
| | | return customProperty; |
| | | } |
| | | |
| | | /** |
| | | * 设置èªå®ä¹å±æ§ï¼å¦mail.smtp.ssl.socketFactory |
| | | * |
| | | * @param key 屿§åï¼ç©ºç½è¢«å¿½ç¥ |
| | | * @param value 屿§å¼ï¼ nullè¢«å¿½ç¥ |
| | | * @return this |
| | | * @since 5.6.4 |
| | | */ |
| | | public MailAccount setCustomProperty(String key, Object value) { |
| | | if (StrUtil.isNotBlank(key) && ObjectUtil.isNotNull(value)) { |
| | | this.customProperty.put(key, value); |
| | | } |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·å¾SMTPç¸å
³ä¿¡æ¯ |
| | | * |
| | | * @return {@link Properties} |
| | | */ |
| | | public Properties getSmtpProps() { |
| | | //å
¨å±ç³»ç»åæ° |
| | | System.setProperty(SPLIT_LONG_PARAMS, String.valueOf(this.splitlongparameters)); |
| | | |
| | | final Properties p = new Properties(); |
| | | p.put(MAIL_PROTOCOL, "smtp"); |
| | | p.put(SMTP_HOST, this.host); |
| | | p.put(SMTP_PORT, String.valueOf(this.port)); |
| | | p.put(SMTP_AUTH, String.valueOf(this.auth)); |
| | | if (this.timeout > 0) { |
| | | p.put(SMTP_TIMEOUT, String.valueOf(this.timeout)); |
| | | } |
| | | if (this.connectionTimeout > 0) { |
| | | p.put(SMTP_CONNECTION_TIMEOUT, String.valueOf(this.connectionTimeout)); |
| | | } |
| | | // issue#2355 |
| | | if (this.writeTimeout > 0) { |
| | | p.put(SMTP_WRITE_TIMEOUT, String.valueOf(this.writeTimeout)); |
| | | } |
| | | |
| | | p.put(MAIL_DEBUG, String.valueOf(this.debug)); |
| | | |
| | | if (this.starttlsEnable) { |
| | | //STARTTLSæ¯å¯¹çº¯ææ¬éä¿¡åè®®çæ©å±ãå®å°çº¯ææ¬è¿æ¥å级为å å¯è¿æ¥ï¼TLSæSSLï¼ï¼ è䏿¯ä½¿ç¨ä¸ä¸ªåç¬çå å¯é信端å£ã |
| | | p.put(STARTTLS_ENABLE, "true"); |
| | | |
| | | if (null == this.sslEnable) { |
| | | //为äºå
¼å®¹æ§çæ¬ï¼å½ç¨æ·æ²¡ææ¤é¡¹é
ç½®æ¶ï¼æç
§starttlsEnableå¼å¯ç¶ææ¶å¯¹å¾
|
| | | this.sslEnable = true; |
| | | } |
| | | } |
| | | |
| | | // SSL |
| | | if (null != this.sslEnable && this.sslEnable) { |
| | | p.put(SSL_ENABLE, "true"); |
| | | p.put(SOCKET_FACTORY, socketFactoryClass); |
| | | p.put(SOCKET_FACTORY_FALLBACK, String.valueOf(this.socketFactoryFallback)); |
| | | p.put(SOCKET_FACTORY_PORT, String.valueOf(this.socketFactoryPort)); |
| | | // issue#IZN95@Giteeï¼å¨Linuxä¸éèªå®ä¹SSLåè®®çæ¬ |
| | | if (StrUtil.isNotBlank(this.sslProtocols)) { |
| | | p.put(SSL_PROTOCOLS, this.sslProtocols); |
| | | } |
| | | } |
| | | |
| | | // è¡¥å
èªå®ä¹å±æ§ï¼å
许èªå®å±æ§è¦çå·²ç»è®¾ç½®çå¼ |
| | | p.putAll(this.customProperty); |
| | | |
| | | return p; |
| | | } |
| | | |
| | | /** |
| | | * 妿æäºå¼ä¸ºnullï¼ä½¿ç¨é»è®¤å¼ |
| | | * |
| | | * @return this |
| | | */ |
| | | public MailAccount defaultIfEmpty() { |
| | | // 廿å件人çå§åé¨å |
| | | final String fromAddress = InternalMailUtil.parseFirstAddress(this.from, this.charset).getAddress(); |
| | | |
| | | if (StrUtil.isBlank(this.host)) { |
| | | // 妿SMTPå°å为空ï¼é»è®¤ä½¿ç¨smtp.<å件人é®ç®±åç¼> |
| | | this.host = StrUtil.format("smtp.{}", StrUtil.subSuf(fromAddress, fromAddress.indexOf('@') + 1)); |
| | | } |
| | | if (StrUtil.isBlank(user)) { |
| | | // å¦æç¨æ·å为空ï¼é»è®¤ä¸ºå件人ï¼issue#I4FYVY@Giteeï¼ |
| | | //this.user = StrUtil.subPre(fromAddress, fromAddress.indexOf('@')); |
| | | this.user = fromAddress; |
| | | } |
| | | if (null == this.auth) { |
| | | // 妿å¯ç é空ç½ï¼å使ç¨è®¤è¯æ¨¡å¼ |
| | | this.auth = (false == StrUtil.isBlank(this.pass)); |
| | | } |
| | | if (null == this.port) { |
| | | // 端å£å¨SSLç¶æä¸é»è®¤ä¸socketFactoryPortä¸è´ï¼éSSLç¶æä¸é»è®¤ä¸º25 |
| | | this.port = (null != this.sslEnable && this.sslEnable) ? this.socketFactoryPort : 25; |
| | | } |
| | | if (null == this.charset) { |
| | | // é»è®¤UTF-8ç¼ç |
| | | this.charset = CharsetUtil.CHARSET_UTF_8; |
| | | } |
| | | |
| | | return this; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "MailAccount [host=" + host + ", port=" + port + ", auth=" + auth + ", user=" + user + ", pass=" + (StrUtil.isEmpty(this.pass) ? "" : "******") + ", from=" + from + ", startttlsEnable=" |
| | | + starttlsEnable + ", socketFactoryClass=" + socketFactoryClass + ", socketFactoryFallback=" + socketFactoryFallback + ", socketFactoryPort=" + socketFactoryPort + "]"; |
| | | } |
| | | } |