You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SimpleJavaMail无法读取eml文件而JavaMail可以?

问题:SimpleJavaMail无法读取EML文件但JavaMail可以正常读取?

问题背景

我分别用SimpleJavaMail库和原生JavaMail API尝试读取EML文件,结果发现SimpleJavaMail解析后返回的Email对象没有填充任何有效数据,而JavaMail却能正常解析出邮件的发件人、主题和正文内容。

测试代码

package mymailRead;

import jakarta.mail.Session;
import jakarta.mail.internet.MimeMessage;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import org.simplejavamail.api.email.Email;
import org.simplejavamail.converter.EmailConverter;

public class Main {

  public static void main(String[] args) {
    String emlFile = "C:/xyz/a.eml";
    System.out.println("Simple per simplejavamail.org ");
    readWithSimpleMail(emlFile);

    System.out.println("\n Java mail read ");
    readWithRegularMail(emlFile);
  }

  private static void readWithSimpleMail(String emlFile) {
    Email email = EmailConverter.emlToEmail(emlFile);
    System.out.println("From " + email.getFromRecipient());
    System.out.println("Subject " + email.getSubject());
    email.getPlainText();
    System.out.println(" email is " + email);
  }

  private static void readWithRegularMail(String emlFile) {
    try {
      Properties props = System.getProperties();
      props.put("mail.host", "smtp.dummydomain.com");
      props.put("mail.transport.protocol", "smtp");

      Session mailSession = Session.getDefaultInstance(props, null);
      InputStream source = new FileInputStream(emlFile);
      MimeMessage message = new MimeMessage(mailSession, source);

      System.out.println("From : " + message.getFrom()[0]);
      System.out.println("Subject : " + message.getSubject());
      System.out.println("--------------");
      System.out.println("Body : " + message.getContent());
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}

依赖配置(build.gradle)

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'application'

mainClassName = 'mymailRead.Main'

repositories {
    mavenCentral()
}

dependencies {
  testImplementation     'junit:junit:4.13'
 
  implementation 'org.simplejavamail:simple-java-mail:8.0.0'
  implementation 'jakarta.mail:jakarta.mail-api:2.1.1'
  implementation 'org.eclipse.angus:jakarta.mail:2.0.1'
  implementation 'jakarta.activation:jakarta.activation-api:2.1.1'
  implementation 'org.slf4j:slf4j-api:2.0.6'
  implementation 'org.slf4j:slf4j-simple:2.0.6'
}

测试用EML文件内容

X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Received: from tomts25-srv.bellnexxia.net
        (tomts25.bellnexxia.net [209.226.175.188])
    by tactika.com (8.9.3/8.9.3) with ESMTP id NAA07621
    for <real@rgagnon.com>; Sun, 1 Feb 2004 13:25:33 -0500 (EST)
Date: Sun, 01 Feb 2004 13:31:40 -0500
From: real gagnon <real@rgagnon.com>
Reply-To: real@rgagnon.com
User-Agent: Mozilla/5.0
   (Windows; U; Windows NT 5.1; en-US; rv:1.4)
   Gecko/20030624 Netscape/7.1 (ax)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: real@rgagnon.com
Subject: Example for HowTo
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
X-UIDL: oP#!!c]^!!1;-!!T@1"!


This is an example for HowTo

程序输出结果

Simple per simplejavamail.org 
From null
Subject 
 email is Email{
    id=null
    sentDate=null
    fromRecipient=null,
    replyToRecipient=null,
    bounceToRecipient=null,
    text='null',
    textHTML='null',
    textCalendar='null (method: null)',
    contentTransferEncoding='quoted-printable',
    subject='',
    recipients=[],
    headers={C=[/xyz/a.eml]}
}

 Java mail read 
From : real gagnon <real@rgagnon.com>
Subject : Example for HowTo
--------------
Body : 
This is an example for HowTo

疑问

为什么SimpleJavaMail无法读取该EML文件,而JavaMail却可以正常读取?


内容的提问来源于stack exchange,提问作者puzzled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:00:37