适配Jakarta与Java 17的org.apache.commons.mail.util.MimeMessageParser替代方案
解决方案:替代MimeMessageParser适配Jakarta Mail
方案1:升级Apache Commons Email到2.x版本
你可能没留意到,Apache Commons Email从2.0版本起已完成Jakarta EE迁移,完全适配jakarta.mail.internet.MimeMessage,不再依赖javax相关包。
1.5是Java EE时代的最后一个版本,直接升级到最新的2.x版本(比如2.0.1),原有的MimeMessageParser代码几乎无需修改就能正常运行。
方案2:直接用Jakarta Mail原生API解析
如果暂时不想升级依赖,可借助Jakarta Mail原生API手动解析MimeMessage,核心逻辑和MimeMessageParser一致:
import jakarta.mail.Part; import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeMultipart; import jakarta.mail.BodyPart; import java.io.InputStream; public class JakartaMimeParser { public static void parse(MimeMessage msg) throws Exception { // 获取邮件主题 String subject = msg.getSubject(); // 获取收件人列表 String[] toRecipients = msg.getRecipients(MimeMessage.RecipientType.TO); // 解析邮件内容 Object content = msg.getContent(); if (content instanceof MimeMultipart multipart) { for (int i = 0; i < multipart.getCount(); i++) { BodyPart part = multipart.getBodyPart(i); if (part.isMimeType("text/plain")) { String plainText = part.getContent().toString(); // 处理纯文本内容 } else if (part.isMimeType("text/html")) { String htmlContent = part.getContent().toString(); // 处理HTML内容 } else if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) { String fileName = part.getFileName(); InputStream attachmentStream = part.getInputStream(); // 处理附件 } } } else { // 处理单一内容类型(如纯文本邮件) String simpleContent = content.toString(); } } }
方案3:自定义封装解析工具
如果需要和原MimeMessageParser类似的API风格,可以自己封装一个工具类,基于Jakarta Mail实现parse()、getPlainContent()、getHtmlContent()等常用方法,适配自身业务需求。
内容的提问来源于stack exchange,提问作者pinacolada
相关产品推荐
相关产品推荐

