Hi,

I wrote a DSNBounce Mailet (extending Vincenzos AbstractNotify) that
produces Delivery Status Notifications using the format described in RFC
3462 - RFC 3464.
This Mailet gets the failed Message with the Exception that occured attached
as Attribute.

Therefor I replaced the call of "bounce(mail, ex);" at the end of
RemoteDeliverys failMessage() by the following:

// setting attributes for DSN mailet
mail.setAttribute("DSN-error", ex);
mail.setState("dsn");
// re-insert the mail into the spool for getting it passed to the
DSN-processor
MailetContext mc = getMailetContext();
try {
    mc.sendMail(mail);
} catch (MessagingException e) {
    // we shouldn't get an exception, because the mail was already processed
    log("Exception re-inserting failed mail: ", e);
}
// bounce() is no longer needed
//bounce(mail, ex);

so the failed message isn't bounced, but goes to a DSN processor, where the
DSNBounce Mailet does the Bounce and ghosts the original Mail.

in my config.xml I defined a processor "dsn" like this:
<!-- the DSN processor -->
<processor name="dsn">
   <!-- all mails go to the DNSBounce Mailet -->
   <mailet match="All" class="DSNBounce">
      <!-- The sender defaults to the postmaster address -->
      <sender> [EMAIL PROTECTED] </sender>
      <!-- Subject prefix, defaults to "Re:" -->
      <prefix> ERROR: </prefix>
      <!-- attachment: how should the original mail be attached? -->
      <!-- MESSAGE or NONE, defaults to MESSAGE -->
      <attachment> MESSAGE </attachment>
      <!-- passThrough, defaults to false -->
      <passThrough> false </passThrough>
      <!-- debug, default = false -->
      <debug> false </debug>
   </mailet>
</processor>

My DSNBounce Mailet could easy be re-written to handle all DSNs, not only
Bounces like it does at the moment. "delayed"-reports and "success"-reports
may be done in this way. But therefor more information must be providet to
the Mailet. I would suggest a DSN-specific Attribute that holds an "Enhanced
Mail System Status Code" (RFC3463). This should be set either by the
SMTP-handler (which could implement RFC3461 - SMTP service extension for
DSN) or by RemoteDelivery. At the moment my Mailet is "guessing" this Status
Code using the exception catched in RemoteDelivery.

But i still have one (minor?) problem with my Mailet to be RFC conform:
JavaMail 1.3.1 doesn't support the MIME-Type "message/delivery-status" and I
don't have the time to look at the JavaBeans Activation Framework for
writing an own DataContentHandler for this MIME-Type. At the monent I send
the delivery-report as MIME-Type "text/plain". If someone is willing to do
the DataContentHandler or if you want to accept it even if it's not 100% RFC
conform I can contribute the current Mailet.

Andreas


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to