package com.mini.capi.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.internet.MimeMessage; import java.io.IOException; public class MailUtil { private static final Logger logger = LoggerFactory.getLogger(MailUtil.class); /** * 获取邮件内容 */ public static String getEmailContent(Message message) { try { Object content = message.getContent(); // 简单文本内容 if (content instanceof String) { return (String) content; } // 复杂内容(多部分) else if (content instanceof Multipart) { Multipart multipart = (Multipart) content; StringBuilder contentBuilder = new StringBuilder(); // 遍历所有部分 for (int i = 0; i < multipart.getCount(); i++) { BodyPart bodyPart = multipart.getBodyPart(i); // 忽略附件 if (BodyPart.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition()) || bodyPart.getFileName() != null) { continue; } // 获取内容 Object partContent = bodyPart.getContent(); if (partContent instanceof String) { contentBuilder.append(partContent); } else if (partContent instanceof Multipart) { // 处理嵌套的多部分内容 contentBuilder.append(getMultipartContent((Multipart) partContent)); } } return contentBuilder.toString(); } } catch (Exception e) { logger.error("获取邮件内容失败", e); } return ""; } /** * 处理嵌套的多部分内容 */ private static String getMultipartContent(Multipart multipart) throws MessagingException, IOException { StringBuilder contentBuilder = new StringBuilder(); for (int i = 0; i < multipart.getCount(); i++) { BodyPart bodyPart = multipart.getBodyPart(i); // 忽略附件 if (BodyPart.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition()) || bodyPart.getFileName() != null) { continue; } Object partContent = bodyPart.getContent(); if (partContent instanceof String) { contentBuilder.append(partContent); } else if (partContent instanceof Multipart) { contentBuilder.append(getMultipartContent((Multipart) partContent)); } } return contentBuilder.toString(); } }