邮件发送

This commit is contained in:
lvleigang 2025-07-22 15:40:05 +08:00
parent a57a39662d
commit c2e3ca063c
2 changed files with 91 additions and 3 deletions

View File

@ -0,0 +1,72 @@
package com.hzya.frame.email;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* @ClassName EmailUtil
* @Description
* @Author llg
* Date 2025/7/1 3:28 下午
*/
@Service
public class EmailUtil {
@Value("${spring.mail.username}")
private String sendEmail ;
@Resource
private JavaMailSender mailSender;
public void sendHtmlMessage(String to, String subject, String htmlContent) throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(sendEmail);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(htmlContent, true); // 第二个参数设为true表示启用HTML格式
mailSender.send(message);
}
public void sendHtmlAndFileMessage(String to, String subject, String htmlContent, List<MultipartFile> attachments) throws MessagingException, UnsupportedEncodingException {
MimeMessage message = mailSender.createMimeMessage();
// 使用MimeMessageHelper的构造函数设置multipart模式为true并指定编码
MimeMessageHelper helper = new MimeMessageHelper(message, MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED, StandardCharsets.UTF_8.name());
helper.setFrom(sendEmail);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(htmlContent, true); // 启用HTML格式
// 处理附件
if (attachments != null && attachments.size() > 0) {
for (int i = 0; i < attachments.size(); i++) {
if (!attachments.get(i).isEmpty()) {
// 使用MimeUtility.encodeWord解决中文附件名乱码问题
String encodedFileName = MimeUtility.encodeWord(attachments.get(i).getOriginalFilename());
helper.addAttachment(encodedFileName, attachments.get(i));
}
}
}
mailSender.send(message);
}
public void sendSimpleMessage(String to, String subject, String text) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(sendEmail);
message.setTo(to);
message.setSubject(subject);
message.setText(text);
mailSender.send(message);
}
}

View File

@ -22,14 +22,19 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
* @Content程序唯一入口controller
@ -239,11 +244,22 @@ public class EntranceController {
// "测试邮件简单",
// "这是一封来自Spring Boot的测试邮件"
//);
String filePath = "/Users/apple/Desktop/【C4协同费控产品】(报表相关)字典说明zm@2025.pdf";
File file = new File(filePath);
List<MultipartFile> attachments = new ArrayList<>();
try (FileInputStream input = new FileInputStream(file)) {
MultipartFile multipartFile = new MockMultipartFile(
file.getName(), // 对应表单中的文件字段名
file.getName(), // 原始文件名
"application/pdf", // 或根据文件类型指定 MIME 类型
input
);
attachments.add(multipartFile);
}
String htmls = "<div style=\"font-family:'Arial',sans-serif;margin:20px;\"><style>table{width:100%;border-collapse:collapse;border:1px solid #ddd}th,td{padding:10px 15px;border:1px solid #ddd;text-align:left}th{background-color:#4CAF50;color:white;font-weight:bold}tr:nth-child(even){background-color:#f2f2f2}tr:hover{background-color:#e0e0e0}h2{text-align:center;font-size:24px;margin-bottom:15px;color:#333}.priority-high{background-color:#ffebee}.priority-medium{background-color:#fff3e0}.priority-low{background-color:#e8f5e9}</style><h2>任务列表</h2><table><thead><tr><th>问题标题</th><th>详细描述</th><th>预计完成时间</th></tr></thead><tbody><tr class=\"priority-medium\"><td>共享结算备注</td><td>结算单备注字段赋值</td><td>2025年7月2日</td></tr><tr class=\"priority-medium\"><td>流水状态展示调整</td><td>1、流水匹配界面明细行匹配状态 调整为已推送<br>2、查询条件 已推送明源 调整为已推送</td><td>2025年7月3日</td></tr><tr class=\"priority-high\"><td>共享单据挂起后,银行流水对账界面客商有误</td><td></td><td>2025年7月4日</td></tr><tr class=\"priority-high\"><td>单据在审核中心 详细信息默认不自动带出</td><td>审批界面表体明细数据未自动展开</td><td>2025年7月4日</td></tr><tr class=\"priority-medium\"><td>单据传输失败后ncc 有自由状态的单子</td><td>通过接口对接NC单据附件上传失败后单据未删除</td><td>2025年7月3日</td></tr><tr class=\"priority-low\"><td>对接审核状态更新优化</td><td>共享审批,取消审批,共享审核,共享复核,驳回状态回传简道云</td><td>2025年7月10日</td></tr></tbody></table></div>";
emailUtil.sendHtmlMessage("number8912@qq.com",
emailUtil.sendHtmlAndFileMessage("number8912@qq.com",
"测试邮件html",
htmls);
htmls,attachments);
return BaseResult.getSuccessMessageEntity("成功");
}