camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: error blocking camel-mail consumer
Date Wed, 09 Apr 2014 12:07:47 GMT
On Tue, Apr 8, 2014 at 2:02 PM,  <stefan.hof@zv-extern.fraunhofer.de> wrote:
> Hello,
>
>> You can try with mapMailMessage=false, and then use Camel's error
>> handler if parsing the body / attachments of the mail fails.
> this would only prevent this special error, but perhaps there will others rise in the
future.
>
>> Though there was a bug in Camel when using mapMailMessage=false. You
>> may need to use next release of Camel and/or latest release if the bug
>> was fixed in that release.
> I worked around that and changed MailMessage in the constructor and setMessage to prevent
this exception (see below), because I couldn't wait for the fix. But again this also only
prevents this special exception, not others.
>
>> An alternative is to add functionality to the mail component to deal
>> with parsing errors before routing, such as mark it as seen or move it
>> etc.
> This would be great. How can I do that (I'm quite new to camel) or is this a new feature
in a coming version?
>

Its not so easy but you would need to add functionality to deal with
this in the mail consumer class
https://github.com/apache/camel/blob/master/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java

You are also welcome to log a JIRA ticket with this enhancement, then
we wont forget. And likely add such in a future release.

> Best regards,
> Stefan Hof
>
>> -----Urspr√ľngliche Nachricht-----
>> Von: Claus Ibsen [mailto:claus.ibsen@gmail.com]
>> Gesendet: Dienstag, 8. April 2014 10:58
>> An: users@camel.apache.org
>> Betreff: Re: error blocking camel-mail consumer
>>
>> Hi
>>
>> You can try with mapMailMessage=false, and then use Camel's error
>> handler if parsing the body / attachments of the mail fails.
>>
>> Though there was a bug in Camel when using mapMailMessage=false. You
>> may need to use next release of Camel and/or latest release if the bug
>> was fixed in that release.
>>
>> An alternative is to add functionality to the mail component to deal
>> with parsing errors before routing, such as mark it as seen or move it
>> etc.
>>
>> On Mon, Apr 7, 2014 at 5:27 PM,  <stefan.hof@zv-extern.fraunhofer.de>
>> wrote:
>> > Hello,
>> >
>> > if I use the mail-component for polling emails and there is an error while
>> consuming the mail, how can I skip this mail and move to the next?
>> >
>> > For example:
>> >
>> from("imaps://{{email.server}}?username={{email.username}}&password=R
>> AW({{email.password}})"
>> >          + "&delete=true&copyTo={{email.folder}}/done&unseen=true&
>> folderName={{email.folder}}"
>> >          + "&fetchSize=1&contentType=text/html")
>> > moves the processed mail in the "done"-subfolder of the email-folder, if
>> everything is ok, eg, the route finishes.
>> >
>> > But if the mail-consumer hits an error _before_ the route starts, the error
>> will be logged and nothing more happens. This means, the processed mail
>> remains unchanged in in the email-folder and will be the next polled email,
>> that leads to the same error, where the error will be logged and...
>> >
>> > How can I break this endless circle an mark the email as (unsuccessfully)
>> processed, so that it will not be read again?
>> >
>> > Best regards,
>> > Stefan Hof
>> >
>> --
>> Claus Ibsen
>> -----------------
>> Red Hat, Inc.
>> Email: cibsen@redhat.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.com
>> Author of Camel in Action: http://www.manning.com/ibsen
>> Make your Camel applications look hawt, try: http://hawt.io
>
> my changes in org.apache.camel.component.mail.MailMessage:
> Constructor:
>
>     public MailMessage(Message message) {
>         this.originalMailMessage = this.mailMessage = message;
>         // ----------- insert ---------------------
>         // Workaround for server-bugs like "unable to load body<structure"
>         // see:
>         // http://www.oracle.com/technetwork/java/faq-135477.html#imapserverbug
>         // Use the MimeMessage copy constructor to make a copy
>         // of the entire message, which will fetch the entire
>         // message from the server and parse it on the client:
>         if (message instanceof MimeMessage) {
>             try {
>                 this.mailMessage = new MimeMessage((MimeMessage) message);
>             } catch (MessagingException e) {
>                 // do nothing, it's a workaround
>             }
>         }
>         // ----------- end insert -----------------
>     }
>
> setMessage:
>
>     public void setMessage(Message mailMessage) {
>         if (this.originalMailMessage == null) {
>             this.originalMailMessage = mailMessage;
>         }
>         this.mailMessage = mailMessage;
>         // ----------- insert ---------------------
>         // Workaround for server-bugs like "unable to load body<structure"
>         // see:
>         // http://www.oracle.com/technetwork/java/faq-135477.html#imapserverbug
>         // Use the MimeMessage copy constructor to make a copy
>         // of the entire message, which will fetch the entire
>         // message from the server and parse it on the client:
>         if (mailMessage.getMessageNumber() > 0 // not necessary, if new or already
a copy
>                 && mailMessage instanceof MimeMessage) {
>             try {
>                 this.mailMessage = new MimeMessage((MimeMessage) mailMessage);
>             } catch (MessagingException e) {
>                 // do nothing, it's a workaround
>             }
>         }
>         // ----------- end insert -----------------
>     }



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
hawtio: http://hawt.io/
fabric8: http://fabric8.io/

Mime
View raw message