We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

javamail imap message content encoding

csalem01
csalem01 asked
on
Medium Priority
2,402 Views
Last Modified: 2013-11-29
I'm trying to download mail from an imap server and I keep getting Unknown Encoding exceptions.  Here's the exception:

java.io.IOException: Unknown encoding: 7Bit;
      javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:108)
      com.sun.mail.handlers.text_plain.getContent(text_plain.java:90)
      javax.activation.DataSourceDataContentHandler.getContent(Unknown Source)
      javax.activation.DataHandler.getContent(Unknown Source)
      javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1395)
      net.mainsequence.email.MailMessage.loadMessage(MailMessage.java:176)
      net.mainsequence.email.MailMessage.<init>(MailMessage.java:110)

Any ideas on how to fix this?
Object content = message.getContent();
			if(content instanceof String){
				mailContent = (String) content;
				textSegment = mailContent;
				htmlSegment = "";
			}else if(content instanceof InputStream){
				InputStream in = (InputStream) content;
				byte[] c = new byte[in.available()];
				in.read(c);
				String temp = new String(c);
				mailContent = temp;
				textSegment = mailContent;
				htmlSegment = "";
			}else if(content instanceof Multipart){
				Multipart multipart = (Multipart) message.getContent();	
				getMultiPart(multipart);
			}

Open in new window

Comment
Watch Question

CERTIFIED EXPERT
Top Expert 2016

Commented:
Looks like you might have a malformed header with a stray or extra semicolon. You might need to catch the exception and extract the message to deal with it
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
encoding should be 7bit
CERTIFIED EXPERT
Top Expert 2016

Commented:
Encoding is not case sensitive

Author

Commented:
i caught the exception and printed the message to a file using the messages getrawinputstream function and it seems like all the messages that I'm having a problem with were caught as spam by spamassassin.  I don't see any problem with the headers though.  Looking through the error log though I see there's also an exception thrown for a message with content type "utf-8" and one message with content type "iso-8859-10".  I attached one of the messages that was throwing the exception with "7Bit", any ideas with what the problem with that message is?
269094365369276.txt
CERTIFIED EXPERT
Top Expert 2016

Commented:
The problem is exactly what i told you above. I've just saved some of my mails+headers to file 'ct' and run the following (note the absence of semicolons):
goose@seegobin:/tmp$ grep 'Content-Transfer-Encoding' ct
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: 7bit
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: 7bit
Content-Transfer-Encoding: 7bit
  h=Received:X-YMail-OSG:Message-ID:Date:From:User-Agent:MIME-Version:To:Subject:Content-Type:Content-Transfer-Encoding;
Content-Transfer-Encoding: 7bit
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: 7bit
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: base64
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: quoted-printable
Content-Transfer-Encoding: base64
goose@seegobin:/tmp$ 

Open in new window

Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
transfer encoding is incorrect as I pointed out above :)
It should be "7bit", not "7bit;"

Author

Commented:
Thanks alot, that worked.  I attached the code that made it work.  

I'm also getting errors with these content types (I attached the messages for each):

Content-Type: text/plain;
 charset="iso-8859-10"

Content-Type: text/plain; charset=koi8-r
Content-Transfer-Encoding: utf-8

Any ideas on how to fix these?
String xEncoding[] = message.getHeader("Content-Transfer-Encoding");
			if(xEncoding != null){
				if(xEncoding.length > 0){
					if(xEncoding[0].equalsIgnoreCase("7Bit;")){
						tempMessage = new MimeMessage((MimeMessage)message);
						tempMessage.removeHeader("Content-Transfer-Encoding");
						tempMessage.addHeader("Content-Transfer-Encoding", "7Bit");
					}
				}
			}

Open in new window

980348665832080.txt
318235670833124.txt
CERTIFIED EXPERT
Top Expert 2016
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION

Author

Commented:
The problem with the KOI8-R mail is the "Content-Transfer-Encoding: utf-8".

"utf-8" isn't in the mime spec.  I guess I'll just have to ignore those mails.

thanks alot for your help
CERTIFIED EXPERT
Top Expert 2016

Commented:
:-)
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.