import com.rt.insurance.constants.CommonConstants; import com.rt.insurance.domain.MailMimeProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.*; /** * 邮件工具类 * * @author Pangxl * @since F.I.B.O.S.S. v1.0, 2018/11/28 15:00 * @version 1.0 * */ public class MailUtils { /** * 模板文件名 * */ private static final String TEMPLATE_FILE_NAME = "mailTemplate.html"; /** * 邮箱登陆地址配置文件名 * */ private static final String MAIL_LOGIN_ADDRESS_FILE_NAME = "mailLoginAddress.properties"; /** * 邮箱地址映射 * */ private static Map<String, String> mailLoginAddressMap = new HashMap<String, String>(); /** * 模板文件内容 * */ private static String templateContent; /** * 单例 * */ private static MailUtils instance = new MailUtils(); private Logger logger = LoggerFactory.getLogger(MailUtils.class); private MailUtils() { // 读取模板文件 readTemplateFile(); // 读取邮箱登陆地址配置 readMailLoginAddress(); } public static MailUtils getInstance() { return instance; } /** * 读取模板文件 * */ private void readTemplateFile() { InputStream inputStream = null; BufferedReader reader = null; try { String lineSeparator = System.getProperty("line.separator"); inputStream = getClass().getClassLoader().getResourceAsStream(TEMPLATE_FILE_NAME); reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); String line = null; StringBuilder builder = new StringBuilder(); while(null != (line = reader.readLine())) { builder.append(line) .append(lineSeparator); } templateContent = builder.toString(); } catch (Exception e) { logger.error(e.getMessage(), e); } finally { if (null != reader) { try { reader.close(); } catch (Exception e) { logger.error(e.getMessage(), e); } } if (null != inputStream) { try { inputStream.close(); } catch (Exception e) { logger.error(e.getMessage(), e); } } } } /** * 读取邮箱地址配置文件 * */ private void readMailLoginAddress() { InputStream inputStream = null; try { inputStream = getClass().getClassLoader().getResourceAsStream(MAIL_LOGIN_ADDRESS_FILE_NAME); Properties properties = new Properties(); properties.load(inputStream); for (Map.Entry<Object, Object> entry: properties.entrySet()) { mailLoginAddressMap.put(entry.getKey().toString(), entry.getValue().toString()); } } catch (Exception e) { logger.error(e.getMessage(), e); } finally { if (null != inputStream) { try { inputStream.close(); } catch (Exception e) { logger.error(e.getMessage(), e); } } } } /** * 获取模板内容 * * @return 模板内容 * */ public String getTemplateContent() { return templateContent; } /** * 获取邮箱对应的登录地址 * * @param mailAddress 邮箱地址 * @return 邮箱对应的登录地址 * */ public String getMailLoginAddress(String mailAddress) { String[] parts = mailAddress.split(CommonConstants.STR_MAIL_SEPARATOR); if (parts.length >= CommonConstants.MAIL_SPLIT_LENGTH) { // 截取@后的部分 String name = parts[1]; // 获取登录地址 return mailLoginAddressMap.get(name); } else { return null; } } /** * 格式化模板文件,替换参数 * * @param contentStr 原模板字符串 * @param args 参数数组 * @return 替换完的模板字符串 * */ public static String formatContent(String contentStr, Object... args) { String tmp = contentStr; String left = "{"; String right = "}"; if (null != contentStr && null != args && args.length > 0) { for (int i = 0; i < args.length; i++) { String src = left + i + right; String target = args[i].toString(); tmp = tmp.replace(src, target); } } return tmp; } /** * 创建邮件Session * * @param properties 邮件属性 * @return 邮件Session * */ public static Session createSendSession(final MailMimeProperties properties) { Properties props = new Properties(); props.setProperty("mail.transport.protocol", MailMimeProperties.DEFAULT_MAIL_TRANSPORT_PROTOCOL); props.setProperty("mail.smtp.host", properties.getHost()); props.setProperty("mail.smtp.auth", String.valueOf(properties.isNeedAuth())); String port = properties.getPort(); if (!Boolean.valueOf(properties.getEnableSSL())) { props.setProperty("mail.smtp.port", port); } // 设置SSL属性 if (Boolean.valueOf(properties.getEnableSSL())) { props.setProperty("mail.smtp.port", String.valueOf(properties.getSslPort())); props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.socketFactory.port", String.valueOf(properties.getSslPort())); } return Session.getInstance(props); } /** * 创建邮件消息 * * @param session 邮件session * @param properties 属性 * @return 消息 * */ public static MimeMessage createMimeMessage(Session session, MailMimeProperties properties) throws Exception { MimeMessage message = new MimeMessage(session); InternetAddress ia = new InternetAddress(properties.getSenderAccount(), properties.getPersonalNickName(), properties.getCharset().name()); message.setFrom(ia); List<String> toList = properties.getToList(); if (listNotEmpty(toList)) { for (String sendTo : toList) { InternetAddress toAddr = new InternetAddress(sendTo, "", properties.getCharset().toString()); message.setRecipient(MimeMessage.RecipientType.TO, toAddr); } } List<String> ccList = properties.getCcList(); if (listNotEmpty(ccList)) { for (String cc : ccList) { InternetAddress toAddr = new InternetAddress(cc, "", properties.getCharset().toString()); message.setRecipient(MimeMessage.RecipientType.CC, toAddr); } } List<String> bccList = properties.getBccList(); if (listNotEmpty(bccList)) { for (String bcc : bccList) { InternetAddress toAddr = new InternetAddress(bcc, "", properties.getCharset().toString()); message.setRecipient(MimeMessage.RecipientType.BCC, toAddr); } } message.setSubject(properties.getMailTitle(), properties.getCharset().name()); message.setContent(properties.getMailContent(), properties.getContentType()); message.setSentDate(new Date()); message.saveChanges(); return message; } /** * 发送邮件 * * @param session 邮件session * @param message 邮件消息 * @param properties 属性信息 * */ public static void sendMail(Session session, MimeMessage message, MailMimeProperties properties) throws Exception { Transport transport = session.getTransport(); transport.connect(properties.getSenderAccount(), properties.getSenderAccountPassword()); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } /** * 判断列表是否为空 * */ private static boolean listNotEmpty(List<?> list) { return null != list && list.size() > 0; } }
邮箱工具类Mailutil
最新推荐文章于 2024-05-25 21:06:30 发布