package com.ruoyi.common.email; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.ServiceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.*; import java.text.MessageFormat; /** * @ClassName EmailUtil * @Description 邮件发送工具 * @Author Sophia * @Date 2022/4/6 16:06 */ @Component public class EmailUtil { @Value("${spring.mail.from}") // 从application.yml配置文件中获取 private String from; // 发送发邮箱地址 @Autowired private JavaMailSender mailSender; private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 读取邮件模板 * 替换模板中的信息 * * @param param 填充内容[验证码、验证链接] * @return */ public String buildContent(String param, String fileName) { //加载邮件html模板"mailtemplate.ftl" Resource resource = new ClassPathResource(fileName); InputStream inputStream = null; BufferedReader fileReader = null; StringBuffer buffer = new StringBuffer(); String line = ""; try { inputStream = resource.getInputStream(); fileReader = new BufferedReader(new InputStreamReader(inputStream)); while ((line = fileReader.readLine()) != null) { buffer.append(line); } } catch (Exception e) { logger.info("发送邮件读取模板失败{}", e); } finally { if (fileReader != null) { try { fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } //替换html模板中的参数 return MessageFormat.format(buffer.toString(), param); } /** * 向用户邮箱发送验证码 * @param email 收件邮箱 * @param code 参数值 * @param subject 副标题 * @param fileName 模板文件名 */ public void sendEmailMessage(String email,String code,String subject, String fileName) { MimeMessage message = mailSender.createMimeMessage(); try { //邮箱发送内容组成 MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setSubject(subject); helper.setText(buildContent(code + "",fileName), true); helper.setTo(email); helper.setFrom("郑州超算" + '<' + from + '>'); mailSender.send(message); } catch (MessagingException e) { logger.info("发送模板邮件失败{}", e); } } /** * 发送纯文本邮件信息 * * @param to 接收方 * @param subject 邮件主题 * @param content 邮件内容(发送内容) */ public void sendMessage(String to, String subject, String content) { // 创建一个邮件对象 SimpleMailMessage msg = new SimpleMailMessage(); msg.setFrom(from); // 设置发送发 msg.setTo(to); // 设置接收方 msg.setSubject(subject); // 设置邮件主题 msg.setText(content); // 设置邮件内容 // 发送邮件 mailSender.send(msg); } /** * 发送带附件的邮件信息 * * @param to 接收方 * @param subject 邮件主题 * @param content 邮件内容(发送内容) * @param files 文件数组 // 可发送多个附件 */ public void sendMessageCarryFiles(String to, String subject, String content, File[] files) { MimeMessage mimeMessage = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); helper.setFrom(from); // 设置发送发 helper.setTo(to); // 设置接收方 helper.setSubject(subject); // 设置邮件主题 helper.setText(content); // 设置邮件内容 if (files != null && files.length > 0) { // 添加附件(多个) for (File file : files) { helper.addAttachment(file.getName(), file); } } } catch (MessagingException e) { e.printStackTrace(); } // 发送邮件 mailSender.send(mimeMessage); } /** * 发送带附件的邮件信息 * * @param to 接收方 * @param subject 邮件主题 * @param content 邮件内容(发送内容) * @param file 单个文件 */ public void sendMessageCarryFile(String to, String subject, String content, File file) { MimeMessage mimeMessage = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); helper.setFrom(from); // 设置发送发 helper.setTo(to); // 设置接收方 helper.setSubject(subject); // 设置邮件主题 helper.setText(content); // 设置邮件内容 helper.addAttachment(file.getName(), file); // 单个附件 } catch (MessagingException e) { e.printStackTrace(); } // 发送邮件 mailSender.send(mimeMessage); } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } }