package cn.kdan.utils; import cn.hutool.json.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.StringUtils; import javax.mail.*; import javax.mail.search.AndTerm; import javax.mail.search.FromStringTerm; import javax.mail.search.SearchTerm; import javax.mail.search.SubjectTerm; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author ComPDF-Bob 2024-06-11 **/ @Slf4j public class EmailUtil { /** * 获取邮件正文 * @param part 邮件信息 * @return 正文 * @throws MessagingException * @throws IOException */ public static String getTextFromMessage(Part part) throws MessagingException, IOException { if (part.isMimeType("text/plain")) { return (String) part.getContent(); } else if (part.isMimeType("text/html")) { // 如果你想要获取 HTML 内容,可以在这里处理 return (String) part.getContent(); } else if (part.isMimeType("multipart/*")) { Multipart multipart = (Multipart) part.getContent(); StringBuilder result = new StringBuilder(); for (int i = 0; i < multipart.getCount(); i++) { BodyPart bodyPart = multipart.getBodyPart(i); String partText = getTextFromMessage(bodyPart); if (partText != null && !partText.isEmpty()) { result.append(partText); } } return result.toString(); } else if (part.isMimeType("message/rfc822")) { // 如果 MIME 类型是 "message/rfc822",这意味着嵌套的邮件 return getTextFromMessage((Part) part.getContent()); } return ""; } /** * 从邮件正文中提取目标邮箱地址 * * @param body 邮件正文 * @return 目标邮箱地址 */ public static String extractTargetEmail(String body) { Pattern pattern = Pattern.compile("([\\w.-]+@[\\w.-]+\\.[\\w]+)"); Matcher matcher = pattern.matcher(body); if (matcher.find()) { return matcher.group(1); } return ""; } }