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]