You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Thierry Frossard <tf...@groupemutuel.ch> on 2015/08/24 16:00:20 UTC

Exception thrown when reading a mail with an attached file, which name contains a semicolon

Hi,

I'm using Camel 2.15.2 with JDK 1.7 under Windows 7 and Eclipse 4.2.2 as
development tool.

My route reads from an IMAP server (IBM Lotus Notes). I have one big problem
: when the route handles an email, which contains an attached file with a
semicolon in his name, then the route always throws this exception :

Failed to extract body due to: Unable to load BODYSTRUCTURE.

4.08.15 15:10:11:313 CEST] 00000172 SystemOut     O [15:10:11.313] WARN 
[Camel (Mail vers Indexation) thread #0 - imap://gmain2p01.groupemutuel.ch]
org.apache.camel.util.CamelLogger.log:224 : Caused by:
[org.apache.camel.RuntimeCamelException - Failed to extract body due to:
Unable to load BODYSTRUCTURE. Exchange: Exchange[MailMessage@0x862446e3].
Message: com.sun.mail.imap.IMAPMessage@16e6c70e]
org.apache.camel.RuntimeCamelException: Failed to extract body due to:
Unable to load BODYSTRUCTURE. Exchange: Exchange[MailMessage@0x862446e3].
Message: com.sun.mail.imap.IMAPMessage@16e6c70e
	at
org.apache.camel.component.mail.MailBinding.extractBodyFromMail(MailBinding.java:275)
~[camel-mail-2.15.2.jar:2.15.2]
	at
org.apache.camel.component.mail.MailMessage.createBody(MailMessage.java:103)
~[camel-mail-2.15.2.jar:2.15.2]
	at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:41)
~[camel-core-2.15.2.jar:2.15.2]
	at
org.apache.camel.component.mail.MailConsumer.createExchanges(MailConsumer.java:326)
~[camel-mail-2.15.2.jar:2.15.2]
	at org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:121)
~[camel-mail-2.15.2.jar:2.15.2]
	at
org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174)
[camel-core-2.15.2.jar:2.15.2]
	at
org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101)
[camel-core-2.15.2.jar:2.15.2]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:482)
[na:1.7.0]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:315)
[na:1.7.0]
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:189)
[na:1.7.0]
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
[na:1.7.0]
	at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
[na:1.7.0]
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:626)
[na:1.7.0]
	at java.lang.Thread.run(Thread.java:804) [na:1.7.0]
Caused by: javax.mail.MessagingException: Unable to load BODYSTRUCTURE
	at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1261)
~[com.ibm.ws.prereq.javamail.jar:na]
	at com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:597)
~[com.ibm.ws.prereq.javamail.jar:na]
	at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1395)
~[com.ibm.ws.prereq.javamail.jar:na]
	at
org.apache.camel.component.mail.MailBinding.extractBodyFromMail(MailBinding.java:247)
~[camel-mail-2.15.2.jar:2.15.2]
	... 13 common frames omitted

Here is the route (very simple) :

  @Override
  public void configure() throws Exception {
    from(getPropertiesUri())
    /**/.to("log:dummy");
  }

  protected String getPropertiesUri() {
    String prefix = Constants.MAIL.concat(provider);
    StringBuilder uri = new StringBuilder();

   
uri.append(getContext().getProperties().get(prefix.concat(".protocol"))).append("://");
   
uri.append(getContext().getProperties().get(prefix.concat(".host"))).append("?");
   
uri.append("username=").append(getContext().getProperties().get(prefix.concat(".user")));
   
uri.append("&password=").append(getContext().getProperties().get(prefix.concat(".password")));
   
uri.append("&folderName=").append(getContext().getProperties().get(prefix.concat(".folder")));
   
uri.append("&unseen=").append(getContext().getProperties().get(prefix.concat(".unseen")));
   
uri.append("&consumer.delay=").append(getContext().getProperties().get(prefix.concat(".consuming.delay")));
   
uri.append("&delete=").append(getContext().getProperties().get(prefix.concat(".delete")));

    String options =
getContext().getProperties().get(prefix.concat(".options"));

    if (StringUtils.isNotBlank(options)) {
     
uri.append("&").append(getContext().getProperties().get(prefix.concat(".options")));
    }

    return uri.toString();
  }

and the uri used to retrieve the mail :

imap://gmain2p01.groupemutuel.ch?username=username&password=password&folderName=IMAP&unseen=true&consumer.delay=30000&delete=true

I didn't find anywhere a similar problem with Camel mail component so I
don't know if it's a bug or if I'm doing something wrong.

Kind regards and thanks a lot for helping.

Thierry Frossard



--
View this message in context: http://camel.465427.n5.nabble.com/Exception-thrown-when-reading-a-mail-with-an-attached-file-which-name-contains-a-semicolon-tp5770941.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Exception thrown when reading a mail with an attached file, which name contains a semicolon

Posted by Thierry Frossard <tf...@groupemutuel.ch>.
Hi Claus,

Thanks a lot for your response. Concerning the semicolons, it's not my
idea, unfortunately I don't have hand on our customer's emails.

Best regards,

Thierry Frossard
Ingénieur de développement
Flux de données

Tél. 058/758.33.07
www.groupemutuel.ch
____________________________________________________
Groupe Mutuel - Rue des Cèdres 5 - Case postale - 1919 Martigny



De :	"Claus Ibsen-2 [via Camel]" <ml-node
            +s465427n5771205h46@n5.nabble.com>
A :	Thierry Frossard <tf...@groupemutuel.ch>,
Date :	03.09.2015 16:35
Objet :	Re: Exception thrown when reading a mail with an attached file,
            which name contains a semicolon



Hi

Can you try with sun java mail instead of ibm? Maybe from an unit test.

Also using semi colons in file names is not such a good idea. as afair
semi colon is used in some headers to separate multi values, eg
content-type=xml; charset=utf-8

You can enable debug option on the mail component and see what all
those headers are and see if you can spot the one with the file name
with semi colon and see what its actual value is.

You can also try to turn of mapMailMessage=false and do you own parsing.



On Mon, Aug 24, 2015 at 4:00 PM, Thierry Frossard
<[hidden email]> wrote:

> Hi,
>
> I'm using Camel 2.15.2 with JDK 1.7 under Windows 7 and Eclipse 4.2.2 as
> development tool.
>
> My route reads from an IMAP server (IBM Lotus Notes). I have one big
problem
> : when the route handles an email, which contains an attached file with a

> semicolon in his name, then the route always throws this exception :
>
> Failed to extract body due to: Unable to load BODYSTRUCTURE.
>
> 4.08.15 15:10:11:313 CEST] 00000172 SystemOut     O [15:10:11.313] WARN
> [Camel (Mail vers Indexation) thread #0 -
imap://gmain2p01.groupemutuel.ch]
> org.apache.camel.util.CamelLogger.log:224 : Caused by:
> [org.apache.camel.RuntimeCamelException - Failed to extract body due to:
> Unable to load BODYSTRUCTURE. Exchange: Exchange[MailMessage@0x862446e3].

> Message: com.sun.mail.imap.IMAPMessage@16e6c70e]
> org.apache.camel.RuntimeCamelException: Failed to extract body due to:
> Unable to load BODYSTRUCTURE. Exchange: Exchange[MailMessage@0x862446e3].

> Message: com.sun.mail.imap.IMAPMessage@16e6c70e
>         at
> org.apache.camel.component.mail.MailBinding.extractBodyFromMail
(MailBinding.java:275)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         at
> org.apache.camel.component.mail.MailMessage.createBody
(MailMessage.java:103)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         at org.apache.camel.impl.MessageSupport.getBody
(MessageSupport.java:41)
> ~[camel-core-2.15.2.jar:2.15.2]
>         at
> org.apache.camel.component.mail.MailConsumer.createExchanges
(MailConsumer.java:326)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         at org.apache.camel.component.mail.MailConsumer.poll
(MailConsumer.java:121)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         at
> org.apache.camel.impl.ScheduledPollConsumer.doRun
(ScheduledPollConsumer.java:174)
> [camel-core-2.15.2.jar:2.15.2]
>         at
> org.apache.camel.impl.ScheduledPollConsumer.run
(ScheduledPollConsumer.java:101)
> [camel-core-2.15.2.jar:2.15.2]
>         at java.util.concurrent.Executors$RunnableAdapter.call
(Executors.java:482)
> [na:1.7.0]
>         at java.util.concurrent.FutureTask.runAndReset
(FutureTask.java:315)
> [na:1.7.0]
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor
$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:189)
> [na:1.7.0]
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run
(ScheduledThreadPoolExecutor.java:304)
> [na:1.7.0]
>         at
> java.util.concurrent.ThreadPoolExecutor.runWorker
(ThreadPoolExecutor.java:1156)
> [na:1.7.0]
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:626)
> [na:1.7.0]
>         at java.lang.Thread.run(Thread.java:804) [na:1.7.0]
> Caused by: javax.mail.MessagingException: Unable to load BODYSTRUCTURE
>         at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE
(IMAPMessage.java:1261)
> ~[com.ibm.ws.prereq.javamail.jar:na]
>         at com.sun.mail.imap.IMAPMessage.getDataHandler
(IMAPMessage.java:597)
> ~[com.ibm.ws.prereq.javamail.jar:na]
>         at javax.mail.internet.MimeMessage.getContent
(MimeMessage.java:1395)
> ~[com.ibm.ws.prereq.javamail.jar:na]
>         at
> org.apache.camel.component.mail.MailBinding.extractBodyFromMail
(MailBinding.java:247)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         ... 13 common frames omitted
>
> Here is the route (very simple) :
>
>   @Override
>   public void configure() throws Exception {
>     from(getPropertiesUri())
>     /**/.to("log:dummy");
>   }
>
>   protected String getPropertiesUri() {
>     String prefix = Constants.MAIL.concat(provider);
>     StringBuilder uri = new StringBuilder();
>
>
> uri.append(getContext().getProperties().get(prefix.concat
(".protocol"))).append("://");
>
> uri.append(getContext().getProperties().get(prefix.concat
(".host"))).append("?");
>
> uri.append("username=").append(getContext().getProperties().get
(prefix.concat(".user")));
>
> uri.append("&password=").append(getContext().getProperties().get
(prefix.concat(".password")));
>
> uri.append("&folderName=").append(getContext().getProperties().get
(prefix.concat(".folder")));
>
> uri.append("&unseen=").append(getContext().getProperties().get
(prefix.concat(".unseen")));
>
> uri.append("&consumer.delay=").append(getContext().getProperties().get
(prefix.concat(".consuming.delay")));
>
> uri.append("&delete=").append(getContext().getProperties().get
(prefix.concat(".delete")));
>
>     String options =
> getContext().getProperties().get(prefix.concat(".options"));
>
>     if (StringUtils.isNotBlank(options)) {
>
> uri.append("&").append(getContext().getProperties().get(prefix.concat
(".options")));
>     }
>
>     return uri.toString();
>   }
>
> and the uri used to retrieve the mail :
>
>
imap://gmain2p01.groupemutuel.ch?username=username&password=password&folderName=IMAP&unseen=true&consumer.delay=30000&delete=true

>
> I didn't find anywhere a similar problem with Camel mail component so I
> don't know if it's a bug or if I'm doing something wrong.
>
> Kind regards and thanks a lot for helping.
>
> Thierry Frossard
>
>
>
> --
> View this message in context:
http://camel.465427.n5.nabble.com/Exception-thrown-when-reading-a-mail-with-an-attached-file-which-name-contains-a-semicolon-tp5770941.html

> Sent from the Camel - Users mailing list archive at Nabble.com.



--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2nd edition: http://www.manning.com/ibsen2



If you reply to this email, your message will be added to the discussion
below:
http://camel.465427.n5.nabble.com/Exception-thrown-when-reading-a-mail-with-an-attached-file-which-name-contains-a-semicolon-tp5770941p5771205.html

To unsubscribe from Exception thrown when reading a mail with an attached
file, which name contains a semicolon, click here.
NAML

--------------------------------
This e-mail may contain confidential and/or privileged information.
If you are not theintended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail.
Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden.





--
View this message in context: http://camel.465427.n5.nabble.com/Exception-thrown-when-reading-a-mail-with-an-attached-file-which-name-contains-a-semicolon-tp5770941p5771233.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Exception thrown when reading a mail with an attached file, which name contains a semicolon

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Can you try with sun java mail instead of ibm? Maybe from an unit test.

Also using semi colons in file names is not such a good idea. as afair
semi colon is used in some headers to separate multi values, eg
content-type=xml; charset=utf-8

You can enable debug option on the mail component and see what all
those headers are and see if you can spot the one with the file name
with semi colon and see what its actual value is.

You can also try to turn of mapMailMessage=false and do you own parsing.



On Mon, Aug 24, 2015 at 4:00 PM, Thierry Frossard
<tf...@groupemutuel.ch> wrote:
> Hi,
>
> I'm using Camel 2.15.2 with JDK 1.7 under Windows 7 and Eclipse 4.2.2 as
> development tool.
>
> My route reads from an IMAP server (IBM Lotus Notes). I have one big problem
> : when the route handles an email, which contains an attached file with a
> semicolon in his name, then the route always throws this exception :
>
> Failed to extract body due to: Unable to load BODYSTRUCTURE.
>
> 4.08.15 15:10:11:313 CEST] 00000172 SystemOut     O [15:10:11.313] WARN
> [Camel (Mail vers Indexation) thread #0 - imap://gmain2p01.groupemutuel.ch]
> org.apache.camel.util.CamelLogger.log:224 : Caused by:
> [org.apache.camel.RuntimeCamelException - Failed to extract body due to:
> Unable to load BODYSTRUCTURE. Exchange: Exchange[MailMessage@0x862446e3].
> Message: com.sun.mail.imap.IMAPMessage@16e6c70e]
> org.apache.camel.RuntimeCamelException: Failed to extract body due to:
> Unable to load BODYSTRUCTURE. Exchange: Exchange[MailMessage@0x862446e3].
> Message: com.sun.mail.imap.IMAPMessage@16e6c70e
>         at
> org.apache.camel.component.mail.MailBinding.extractBodyFromMail(MailBinding.java:275)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         at
> org.apache.camel.component.mail.MailMessage.createBody(MailMessage.java:103)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:41)
> ~[camel-core-2.15.2.jar:2.15.2]
>         at
> org.apache.camel.component.mail.MailConsumer.createExchanges(MailConsumer.java:326)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         at org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:121)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         at
> org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174)
> [camel-core-2.15.2.jar:2.15.2]
>         at
> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101)
> [camel-core-2.15.2.jar:2.15.2]
>         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:482)
> [na:1.7.0]
>         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:315)
> [na:1.7.0]
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:189)
> [na:1.7.0]
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
> [na:1.7.0]
>         at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
> [na:1.7.0]
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:626)
> [na:1.7.0]
>         at java.lang.Thread.run(Thread.java:804) [na:1.7.0]
> Caused by: javax.mail.MessagingException: Unable to load BODYSTRUCTURE
>         at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1261)
> ~[com.ibm.ws.prereq.javamail.jar:na]
>         at com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:597)
> ~[com.ibm.ws.prereq.javamail.jar:na]
>         at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1395)
> ~[com.ibm.ws.prereq.javamail.jar:na]
>         at
> org.apache.camel.component.mail.MailBinding.extractBodyFromMail(MailBinding.java:247)
> ~[camel-mail-2.15.2.jar:2.15.2]
>         ... 13 common frames omitted
>
> Here is the route (very simple) :
>
>   @Override
>   public void configure() throws Exception {
>     from(getPropertiesUri())
>     /**/.to("log:dummy");
>   }
>
>   protected String getPropertiesUri() {
>     String prefix = Constants.MAIL.concat(provider);
>     StringBuilder uri = new StringBuilder();
>
>
> uri.append(getContext().getProperties().get(prefix.concat(".protocol"))).append("://");
>
> uri.append(getContext().getProperties().get(prefix.concat(".host"))).append("?");
>
> uri.append("username=").append(getContext().getProperties().get(prefix.concat(".user")));
>
> uri.append("&password=").append(getContext().getProperties().get(prefix.concat(".password")));
>
> uri.append("&folderName=").append(getContext().getProperties().get(prefix.concat(".folder")));
>
> uri.append("&unseen=").append(getContext().getProperties().get(prefix.concat(".unseen")));
>
> uri.append("&consumer.delay=").append(getContext().getProperties().get(prefix.concat(".consuming.delay")));
>
> uri.append("&delete=").append(getContext().getProperties().get(prefix.concat(".delete")));
>
>     String options =
> getContext().getProperties().get(prefix.concat(".options"));
>
>     if (StringUtils.isNotBlank(options)) {
>
> uri.append("&").append(getContext().getProperties().get(prefix.concat(".options")));
>     }
>
>     return uri.toString();
>   }
>
> and the uri used to retrieve the mail :
>
> imap://gmain2p01.groupemutuel.ch?username=username&password=password&folderName=IMAP&unseen=true&consumer.delay=30000&delete=true
>
> I didn't find anywhere a similar problem with Camel mail component so I
> don't know if it's a bug or if I'm doing something wrong.
>
> Kind regards and thanks a lot for helping.
>
> Thierry Frossard
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/Exception-thrown-when-reading-a-mail-with-an-attached-file-which-name-contains-a-semicolon-tp5770941.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2nd edition: http://www.manning.com/ibsen2