Hi,

finaly I got time to get things ready.

This Patch to RemoteDelivery introduces a new parameter <dsnProcessor>.
Here you can specify a processor, where DSN conform Bounces are created.
If this parameter is missing, mails get bounced the "old way".

Here is a configuration example:

<processor name="transport">
[...]
   <mailet match="All" class="RemoteDelivery">
   [...]
      <!-- Processor for DSN creation -->
      <dsnProcessor>dsn</dsnProcessor>
   </mailet>
</processor>

<processor name="dsn">
   <mailet match="All" class="DSNBounce">
      <!-- sender defaults to postmaster -->
      <sender> [EMAIL PROTECTED] </sender>
        <!-- Subject Prefix (default=Re:) -->
      <prefix> ERROR: </prefix>
      <passThrough> false </passThrough>
   </mailet>
</processor>

The DSNBounce Mailet creates Bounce Mails in the format specified by RFCs
3462
to 3464. There is only one discrepancy: the MIME-type "text/plain" is used
for
the status-report part, instead of "message/delivery-status".
JavaMail doesn't support "message/delivery-status".

Andreas


***************************************
Mail: [EMAIL PROTECTED]
Web: www.pansoft.de
Tel.: +49 (0)721 62532 - 16
Fax: +49 (0)721 62532 - 44

PANSOFT GmbH
Tullastr. 28
76131 Karlsruhe
***************************************
Index: RemoteDelivery.java
===================================================================
RCS file: 
/home/cvspublic/james-server/src/java/org/apache/james/transport/mailets/RemoteDelivery.java,v
retrieving revision 1.51
diff -u -r1.51 RemoteDelivery.java
--- RemoteDelivery.java 18 Jun 2003 15:59:44 -0000      1.51
+++ RemoteDelivery.java 27 Nov 2003 16:21:02 -0000
@@ -89,6 +89,7 @@
 import org.apache.mailet.GenericMailet;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
+import org.apache.mailet.MailetContext;
 import org.apache.mailet.MailetContextConstants;
 import org.apache.mailet.SpoolRepository;
 
@@ -138,6 +139,7 @@
     private Collection deliveryThreads = new Vector();
 
     private volatile boolean destroyed = false; //Flag that the run method will check 
and end itself if set to true
+    private String dsnProcessor = null; // the processor for creating DSNs
 
     /**
      * Initialize the mailet
@@ -174,6 +176,7 @@
             log("Invalid timeout setting: " + getInitParameter("timeout"));
         }
         sendPartial = (getInitParameter("sendpartial") == null) ? false : new 
Boolean(getInitParameter("sendpartial")).booleanValue();
+        dsnProcessor = getInitParameter("dsnProcessor");
 
         String gateway = getInitParameter("gateway");
         gatewayPort = getInitParameter("gatewayPort");
@@ -543,7 +546,25 @@
                 log(logBuffer.toString());
             }
         }
-        bounce(mail, ex);
+
+        if (dsnProcessor != null) {
+            // do the new DSN bounce
+            // setting attributes for DSN mailet
+            mail.setAttribute("DSN-error", ex);
+            mail.setState(dsnProcessor);
+            // 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);
+            }
+        } else {
+            // do an old style bounce
+            bounce(mail, ex);
+        }
+
         return true;
     }
 

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

Reply via email to