package cn.primeledger.bank.service.core.mc.service;import cn.primeledger.bank.service.core.mc.exception.MailException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Service;import javax.mail.*;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import java.util.List;import java.util.Properties;/** * 邮件发送接口(使用前必须调用init函数) */@Servicepublic class MailSenderService { private Logger LOGGER = LoggerFactory.getLogger(MailSenderService.class); //邮件服务器地址 @Value("${mail.smtp.username}") private String username; //邮件服务器地址 @Value("${mail.smtp.password}") private String password; //邮件服务器地址 @Value("${mail.smtp.host}") private String host; //发送邮件端口 @Value("${mail.smtp.port}") private String port; //邮箱Session private Session session; /** * 初始化邮箱发送器 */ private void init() { Properties props = new Properties(); //初始化props props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", host); props.put("mail.smtp.port", port); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.starttls.enable", "true"); //创建session,想当于邮箱登录 session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); } /** * 发送邮件 * * @param accept 收信人邮箱地址 * @param subject 邮件标题 * @param content 邮件内容 * @throws MessagingException */ public void send(String accept, String subject, String content) { LOGGER.info("start into mail send. accept=[{}]", accept); //初始化邮件服务器 this.init(); //创建mime类型邮件 final MimeMessage msg = new MimeMessage(session); try { //设置发信人 msg.setFrom(new InternetAddress(username)); //设置收信人 msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(accept)); //设置邮件标题 msg.setSubject(subject, "utf-8"); //设置邮件内容,并设置UTF-8编码 msg.setContent(content, "text/html;charset=utf-8"); //发送邮件 Transport.send(msg); } catch (MessagingException e) { throw new MailException("发送邮件,消息传递异常", e); } finally { LOGGER.info("end mail send. accept=[{}]", accept); } } /** * 群发邮件 * * @param accepts 收信人们的邮箱地址 * @param subject 邮件标题 * @param content 邮件内容 * @throws MessagingException */ public void send(Listaccepts, String subject, String content) { LOGGER.info("start into mails send. accept=[{}]", accepts); //初始化邮件服务器 this.init(); //创建mime类型邮件 final MimeMessage msg = new MimeMessage(session); try { //设置发信人 msg.setFrom(new InternetAddress(username)); //设置收信人们 int num = accepts.size(); InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { addresses[i] = new InternetAddress(accepts.get(i)); } msg.setRecipients(MimeMessage.RecipientType.TO, addresses); //设置邮件标题 msg.setSubject(subject, "text/html;charset=utf-8"); //设置邮件内容 msg.setContent(content, "text/html;charset=utf-8"); Transport.send(msg); } catch (MessagingException e) { throw new MailException("群发邮件,消息传递异常", e); } finally { LOGGER.info("end mails send. accept=[{}]", accepts); } }}
@Servicepublic class MailSenderService { private Logger LOGGER = LoggerFactory.getLogger(MailSenderService.class); //邮件服务器账号 private static String USERNAME; //邮件服务器密码 private static String PASSWORD; //邮件服务器URL private static String HOST; //发送邮件端口 private static String PORT; //spring boot 不能注入静态属性,可以所以这么做到 @Value("${mail.smtp.username}") public void setUsername(String username) { USERNAME = username; } @Value("${mail.smtp.password}") public void setPassword(String password) { PASSWORD = password; } @Value("${mail.smtp.host}") public void setHost(String host) { HOST = host; } @Value("${mail.smtp.port}") public void setPort(String port) { PORT = port; } //邮件发件人 @Value("${mail.smtp.from}") private String from; //邮件发件人名称 @Value("${mail.smtp.fromname}") private String fromname; //邮箱Session private static Session session; /** * 初始化邮箱发送器 */ private static void init() { // 配置javamail Properties props = System.getProperties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.host", HOST); props.setProperty("mail.smtp.port", PORT); props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.connectiontimeout", "180"); props.setProperty("mail.smtp.timeout", "600"); props.setProperty("mail.mime.encodefilename", "true"); session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(USERNAME, PASSWORD); } }); } /** * 设置邮件 * * @param message * @param subject * @param content * @throws UnsupportedEncodingException * @throws MessagingException */ private void setMessage(MimeMessage message, String subject, String content) throws UnsupportedEncodingException, MessagingException { // 发信人 message.setFrom(new InternetAddress(from, fromname, "UTF-8")); // 邮件主题 message.setSubject(subject, "UTF-8"); // 邮件类型:纯文本与超文本共存。 Multipart multipart = new MimeMultipart("alternative"); // 添加html形式的邮件正文 String html = "" + content + " "; BodyPart contentPart = new MimeBodyPart(); contentPart.setHeader("Content-Type", "text/html;charset=UTF-8"); contentPart.setHeader("Content-Transfer-Encoding", "base64"); contentPart.setContent(html, "text/html;charset=UTF-8"); multipart.addBodyPart(contentPart); message.setContent(multipart); } /** * 发送邮件 * * @param accept 收信人邮箱地址 * @param subject 邮件标题 * @param content 邮件内容 * @throws MessagingException */ public void send(String accept, String subject, String content) { LOGGER.info("start into mail send. accept=[{}]", accept); //初始化邮件服务器 this.init(); try { //创建mime类型邮件 MimeMessage message = new MimeMessage(session); //设置邮件 setMessage(message, subject, content); // 收件人地址 message.addRecipient(Message.RecipientType.TO, new InternetAddress(accept)); // 连接sendcloud服务器,发送邮件 SMTPTransport transport = (SMTPTransport) session.getTransport("smtp"); transport.connect(); transport.sendMessage(message, message.getRecipients(MimeMessage.RecipientType.TO)); transport.close(); } catch (Exception e) { LOGGER.error("sender mail fail", e); MonitorLogUtils.logMonitorInfo(MonitorTarget.MAIL_SENDER_ERROR, TargetInfoType.INT, 1); throw new MailException("sender mail fail",e); } } /** * 群发邮件 * * @param accepts 收信人们的邮箱地址 * @param subject 邮件标题 * @param content 邮件内容 * @throws MessagingException */ public void send(Listaccepts, String subject, String content) { LOGGER.info("start into mails send. accept=[{}]", accepts); //初始化邮件服务器 this.init(); //创建mime类型邮件 final MimeMessage message = new MimeMessage(session); try { //设置邮件 setMessage(message, subject, content); //设置收信人们 int num = accepts.size(); InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { addresses[i] = new InternetAddress(accepts.get(i)); } message.setRecipients(MimeMessage.RecipientType.TO, addresses); // 连接sendcloud服务器,发送邮件 SMTPTransport transport = (SMTPTransport) session.getTransport("smtp"); transport.connect(); transport.sendMessage(message, message.getRecipients(MimeMessage.RecipientType.TO)); transport.close(); } catch (Exception e) { LOGGER.error("sender mails fail", e); MonitorLogUtils.logMonitorInfo(MonitorTarget.MAIL_SENDER_ERROR, TargetInfoType.INT, 1); throw new MailException("sender mails fail", e); } finally { LOGGER.info("end mails send. accept=[{}]", accepts); } }}