package com.union.voiceandtextreceiver.component; import com.sun.mail.util.MailSSLSocketFactory; import com.union.voiceandtextreceiver.model.EmailMsgMdl; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.*; import java.io.File; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; import java.util.Date; import java.util.Properties; @Component public class MailUtil { private static final Logger logger = Logger.getLogger(MailUtil.class); @Value("${spring.mail.host}") private String mailhost; @Value("${spring.mail.username}") private String mailusername; @Value("${spring.mail.password}") private String mailpassword; @Value("${spring.mail.port}") private String mailport; public String password = mailpassword;//"TXzUeNDAUhYGjxSw";// 登录密码 public String protocol = "smtp";// 协议 private String theme = "通知"; //初始化参数 public Session initProperties() { Properties properties = new Properties(); properties.setProperty("mail.transport.protocol", protocol); properties.setProperty("mail.smtp.host", mailhost); properties.setProperty("mail.smtp.port", mailport); // 使用smtp身份验证 properties.put("mail.smtp.auth", "true"); // 开启安全协议,使用SSL,企业邮箱必需 MailSSLSocketFactory mailSSLSocketFactory = null; try { mailSSLSocketFactory = new MailSSLSocketFactory(); mailSSLSocketFactory.setTrustAllHosts(true); } catch (GeneralSecurityException e) { e.printStackTrace(); } properties.put("mail.smtp.enable", "true"); properties.put("mail.smtp.ssl.socketFactory", mailSSLSocketFactory); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.socketFactory.fallback", "false"); properties.put("mail.smtp.socketFactory.port", mailport); Session session = Session.getDefaultInstance(properties, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(mailusername, mailpassword); } }); // session.setDebug(true); return session; } public void sendSimpleMail( EmailMsgMdl messageMdl){ email(messageMdl.getMailTo(),messageMdl.getMailTitle(),messageMdl.getMailContent(),null); } public void email(String emailTo, String title, String content, String[] fileNames) { try { Session session = initProperties(); MimeMessage mimeMessage = new MimeMessage(session); mimeMessage.setFrom(new InternetAddress(mailusername, mailusername));// 发件人,可以设置发件人的别名 // 收件人,多人接收,emailTo 逗号分隔 InternetAddress[] internetAddressTo = InternetAddress.parse(emailTo); mimeMessage.setRecipients(Message.RecipientType.TO, internetAddressTo); // 主题 if (StringUtils.isEmpty(title)){ mimeMessage.setSubject(theme); }else{ mimeMessage.setSubject(title); } // 时间 mimeMessage.setSentDate(new Date()); // 容器类 附件 MimeMultipart mimeMultipart = new MimeMultipart(); // 可以包装文本,图片,附件 if (!StringUtils.isEmpty(content)){ MimeBodyPart bodyPart = new MimeBodyPart(); // 设置内容 getEmailHtml是邮箱内容模板 bodyPart.setContent(content, "text/html; charset=UTF-8"); mimeMultipart.addBodyPart(bodyPart); } if (!StringUtils.isEmpty(fileNames) && fileNames.length > 0){ for (String fileName:fileNames) { File attachFile = new File(fileName); if (attachFile.exists()){ MimeBodyPart attachPart = new MimeBodyPart(); FileDataSource fileDataSource = new FileDataSource(attachFile); attachPart.setDataHandler(new DataHandler(fileDataSource)); attachPart.setFileName(MimeUtility.encodeText(fileDataSource.getName())); mimeMultipart.addBodyPart(attachPart); }else{ logger.error("邮件附件文件 {} 不存在"+fileName); return; } } } mimeMessage.setContent(mimeMultipart); mimeMessage.saveChanges(); Transport.send(mimeMessage); } catch (MessagingException | UnsupportedEncodingException e) { e.printStackTrace(); logger.error("发送邮件失败:" + emailTo + " ----" + e.getMessage()); } } }
EmailMsgMdl类:
package com.union.voiceandtextreceiver.model; public class EmailMsgMdl { String mailTo; String mailTitle; String maileCc; String mailContent; String fromMailAddr; public String getMailTo() { return mailTo; } public void setMailTo(String mailTo) { this.mailTo = mailTo; } public String getMailTitle() { return mailTitle; } public void setMailTitle(String mailTitle) { this.mailTitle = mailTitle; } public String getMaileCc() { return maileCc; } public void setMaileCc(String maileCc) { this.maileCc = maileCc; } public String getMailContent() { return mailContent; } public void setMailContent(String mailContent) { this.mailContent = mailContent; } public String getFromMailAddr() { return fromMailAddr; } public void setFromMailAddr(String fromMailAddr) { this.fromMailAddr = fromMailAddr; } }