Author: noel
Date: Sat Jun  4 10:20:11 2005
New Revision: 180005

URL: http://svn.apache.org/viewcvs?rev=180005&view=rev
Log:
Modify JAME's MailetContext.bounce implementation to not include the original 
message, and to use the existing MailImpl.bounce() method to generate the 
bounce message.  This should result in significant memory savings and prevents 
spreading malicious messages when unknowingly bouncing to a spoofed sender.

Modified:
    james/server/trunk/src/java/org/apache/james/James.java
    james/server/trunk/src/java/org/apache/james/core/MailImpl.java

Modified: james/server/trunk/src/java/org/apache/james/James.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/James.java?rev=180005&r1=180004&r2=180005&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/James.java (original)
+++ james/server/trunk/src/java/org/apache/james/James.java Sat Jun  4 10:20:11 
2005
@@ -637,11 +637,6 @@
      */
 
     public void bounce(Mail mail, String message, MailAddress bouncer) throws 
MessagingException {
-        MimeMessage orig = mail.getMessage();
-
-        //Create the reply message
-        MimeMessage reply = (MimeMessage) orig.reply(false);
-
         if (mail.getSender() == null) {
             if (getLogger().isInfoEnabled())
                 getLogger().info("Mail to be bounced contains a null (<>) 
reverse path.  No bounce will be sent.");
@@ -650,56 +645,15 @@
             // Bounce message goes to the reverse path, not to the Reply-To 
address
             if (getLogger().isInfoEnabled())
                 getLogger().info("Processing a bounce request for a message 
with a reverse path of " + mail.getSender().toString());
-            reply.setRecipient(MimeMessage.RecipientType.TO, 
mail.getSender().toInternetAddress());
         }
 
-        reply.setSentDate(new Date());
-        //Create the list of recipients in our MailAddress format
-        Collection recipients = new HashSet();
-        Address addresses[] = reply.getAllRecipients();
-        if (addresses != null) {
-            for (int i = 0; i < addresses.length; i++) {
-                // Javamail treats the "newsgroups:" header field as a
-                // recipient, so we want to filter those out.
-                if ( addresses[i] instanceof InternetAddress ) {
-                    recipients.add(new 
MailAddress((InternetAddress)addresses[i]));
-                }
-            }
-        }
+        Mail reply = ((MailImpl) mail).bounce(message);
         //Change the sender...
-        reply.setFrom(bouncer.toInternetAddress());
-        try {
-            //Create the message body
-            MimeMultipart multipart = new MimeMultipart("mixed");
-
-            // Create the message
-            MimeMultipart mpContent = new MimeMultipart("alternative");
-            MimeBodyPart contentPartRoot = new MimeBodyPart();
-            contentPartRoot.setContent(mpContent);
-
-            multipart.addBodyPart(contentPartRoot);
-
-            MimeBodyPart part = new MimeBodyPart();
-            part.setText(message);
-            mpContent.addBodyPart(part);
-
-            //Add the original message as the second mime body part
-            part = new MimeBodyPart();
-            part.setContent(orig, "message/rfc822");
-            if ((orig.getSubject() != null) && 
(orig.getSubject().trim().length() > 0)) {
-                part.setFileName(orig.getSubject().trim());
-            } else {
-                part.setFileName("No Subject");
-            }
-            part.setDisposition(javax.mail.Part.ATTACHMENT);
-            multipart.addBodyPart(part);
-            reply.setContent(multipart);
-        } catch (Exception ioe) {
-            throw new MessagingException("Unable to create multipart body", 
ioe);
-        }
-        reply.saveChanges();
+        reply.getMessage().setFrom(bouncer.toInternetAddress());
+        reply.getMessage().saveChanges();
         //Send it off ... with null reverse-path
-        sendMail(null, recipients, reply);
+        ((MailImpl)reply).setSender(null);
+        sendMail(reply);
     }
 
     /**

Modified: james/server/trunk/src/java/org/apache/james/core/MailImpl.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MailImpl.java?rev=180005&r1=180004&r2=180005&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/MailImpl.java (original)
+++ james/server/trunk/src/java/org/apache/james/core/MailImpl.java Sat Jun  4 
10:20:11 2005
@@ -456,6 +456,7 @@
         MimeMessage original = getMessage();
         MimeMessage reply = (MimeMessage) original.reply(false);
         reply.setSubject("Re: " + original.getSubject());
+        reply.setSentDate(new Date());
         Collection recipients = new HashSet();
         recipients.add(getSender());
         InternetAddress addr[] = { new 
InternetAddress(getSender().toString())};



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

Reply via email to