为何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
相关产品推荐
相关产品推荐

