bbottema / simple-java-mail

Simple API, Complex Emails (Jakarta Mail smtp wrapper)

Home Page:http://www.simplejavamail.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bugfix: Fix support for reading Calendar attachments

lasombra opened this issue · comments

Hi,

While experimenting with Simple Java Mail to read Message-ID fields from a Maildir store, when conversing a mail file, which contains a text/calendar attachment, using EmailConverter.emlToEmail(InputStream), I am greeted with the following exception when running on Java 11+:

java.lang.ClassCastException: class javax.mail.util.SharedByteArrayInputStream cannot be cast to class java.lang.String (javax.m
ail.util.SharedByteArrayInputStream is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'boo
tstrap')
        at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimePartTree(MimeMessageParser.java:158)
        at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimePartTree(MimeMessageParser.java:163)
        at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimePartTree(MimeMessageParser.java:163)
        at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimeMessage(MimeMessageParser.java:139)
        at org.simplejavamail.converter.EmailConverter.mimeMessageToEmailBuilder(EmailConverter.java:118)
        at org.simplejavamail.converter.EmailConverter.emlToEmailBuilder(EmailConverter.java:374)
        at org.simplejavamail.converter.EmailConverter.emlToEmailBuilder(EmailConverter.java:353)
        at org.simplejavamail.converter.EmailConverter.emlToEmail(EmailConverter.java:287)
        at org.simplejavamail.converter.EmailConverter.emlToEmail(EmailConverter.java:279)
        at cx.hoffmann.maildir.Main$1.visitFile(Main.java:48)
        at cx.hoffmann.maildir.Main$1.visitFile(Main.java:44)
        at java.base/java.nio.file.Files.walkFileTree(Files.java:2724)
        at cx.hoffmann.maildir.Main.call(Main.java:44)
        at cx.hoffmann.maildir.Main.call(Main.java:18)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1933)
        at picocli.CommandLine.access$1100(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2332)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2326)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2291)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2159)
        at picocli.CommandLine.execute(CommandLine.java

On Java 8 the exception is:

java.lang.ClassCastException: javax.mail.util.SharedByteArrayInputStream cannot be cast to java.lang.String
        at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimePartTree(MimeMessageParser.java:158)
        at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimePartTree(MimeMessageParser.java:163)
        at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimePartTree(MimeMessageParser.java:163)
        at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimeMessage(MimeMessageParser.java:139)
        at org.simplejavamail.converter.EmailConverter.mimeMessageToEmailBuilder(EmailConverter.java:118)
        at org.simplejavamail.converter.EmailConverter.emlToEmailBuilder(EmailConverter.java:374)
        at org.simplejavamail.converter.EmailConverter.emlToEmailBuilder(EmailConverter.java:353)
        at org.simplejavamail.converter.EmailConverter.emlToEmail(EmailConverter.java:287)
        at org.simplejavamail.converter.EmailConverter.emlToEmail(EmailConverter.java:279)
        at cx.hoffmann.maildir.Main$1.visitFile(Main.java:48)
        at cx.hoffmann.maildir.Main$1.visitFile(Main.java:44)
        at java.nio.file.Files.walkFileTree(Files.java:2670)
        at cx.hoffmann.maildir.Main.call(Main.java:44)
        at cx.hoffmann.maildir.Main.call(Main.java:18)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1933)
        at picocli.CommandLine.access$1100(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2332)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2326)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2291)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2159)
        at picocli.CommandLine.execute(CommandLine.java:2058)
        at cx.hoffmann.maildir.Main.main(Main.java:29)

Unfortunately I can't provide the e-mail file or scrub it, but the multipart header is:

--f4030438886cb92783054e899918
Content-Type: text/calendar; charset=UTF-8; method=CANCEL
Content-Transfer-Encoding: 7bit

I reproduced it with a basic junit test. Somehow didn't come to surface earlier. Fixing asap.

Fix released in 6.4.2. Thanks for the report!

You're a star, thanks mate :)