Files
c-api/src/main/java/com/mini/capi/utils/MailUtil.java

89 lines
2.8 KiB
Java
Raw Normal View History

2025-09-22 18:14:20 +08:00
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();
}
}