UTF-7 not supported on a spring application in docker

79 Views Asked by At

I have the following problem:

  • I have a microservice running as docker image in a kubernetes pod
  • The service can create "contacts" and loads for that base64 encoded mails from a source
  • we decode them and want to create Emails with simple-java-mail library
  • but some mails are in UTF-7 which is unknown and I got:
java.io.UnsupportedEncodingException: utf-7
    at java.lang.String.lookupCharset(String.java:819) ~[?:?]
    at java.lang.String.<init>(String.java:487) ~[?:?]
    at jakarta.mail.internet.MimeUtility.decodeWord(MimeUtility.java:901) ~[jakarta.mail-2.0.1.jar:2.0.1]
    at jakarta.mail.internet.MimeUtility.decodeText(MimeUtility.java:603) ~[jakarta.mail-2.0.1.jar:2.0.1]
    at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.decodeText(MimeMessageParser.java:543) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.internal.mimemessage.DecodedHeader.of(DecodedHeader.java:30) ~[simple-java-mail-8.0.0.jar:?]
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[?:?]
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[?:?]
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[?:?]
    at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.retrieveAllHeaders(MimeMessageParser.java:365) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimePartTree(MimeMessageParser.java:159) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimeMessage(MimeMessageParser.java:153) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.mimeMessageToEmailBuilder(EmailConverter.java:138) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.mimeMessageToEmailBuilder(EmailConverter.java:125) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.emlToEmailBuilder(EmailConverter.java:398) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.emlToEmail(EmailConverter.java:327) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.emlToEmail(EmailConverter.java:319) ~[simple-java-mail-8.0.0.jar:?]

I tried to use https://github.com/k9mail/jutf7 and added it to the pom file. Locally that worked, but on kubernetes not. Again an UnsupportedEncodingException occured.

I thought maybe kubernetes or docker (sorry I'm not that deep into that DevOps stuff) isn't able to add that UTF-7 library to the classpath. So I testes to copy the files directly into my project. I added a META-INF folder with a service file and put my CharsetProvider into it.

java.nio.charset.spi.CharsetProvider

de.afi.api.utility.encoding.utf7.CharsetProvider

Again locally it worked, on kubernetes not.

I read any stackoverflow issue regarding UTF-7 and CharsetProvider, but whether there wasn't a solution or the solution isn't possible for me, like using CharsetProvider().charsetForName("...") by myself, which isn't possible when needing UTF-7 deep in simple java mail

I had the feeling that loading CharSets from META-inf/services doesn't work anymore for the combination of

  • Java17
  • SpringBoot 3
  • simple-java-mail 8.0.0
  • running in a docker container Has anybody an idea?
0

There are 0 best solutions below