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]