Re: error blocking camel-mail consumer

2014-04-09 Thread Claus Ibsen
On Tue, Apr 8, 2014 at 2:02 PM,  stefan@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.ib...@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@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=truecopyTo={{email.folder}}/doneunseen=true
 folderName={{email.folder}}
   + fetchSize=1contentType=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: cib...@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 bodystructure
 // 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 bodystructure
 // 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

Re: error blocking camel-mail consumer

2014-04-08 Thread Claus Ibsen
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@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=RAW({{email.password}})
  + delete=truecopyTo={{email.folder}}/doneunseen=true 
 folderName={{email.folder}}
  + fetchSize=1contentType=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: cib...@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


AW: error blocking camel-mail consumer

2014-04-08 Thread stefan.hof
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?

Best regards,
Stefan Hof

 -Ursprüngliche Nachricht-
 Von: Claus Ibsen [mailto:claus.ib...@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@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=truecopyTo={{email.folder}}/doneunseen=true
 folderName={{email.folder}}
   + fetchSize=1contentType=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: cib...@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 bodystructure
// 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 bodystructure
// 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 -
}


error blocking camel-mail consumer

2014-04-07 Thread stefan.hof
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=RAW({{email.password}})
 + delete=truecopyTo={{email.folder}}/doneunseen=true 
folderName={{email.folder}}
 + fetchSize=1contentType=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