You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by se...@apache.org on 2001/08/11 23:33:17 UTC
cvs commit: jakarta-james/src/java/org/apache/james/transport/mailets RemoteDelivery.java
serge 01/08/11 14:33:17
Modified: src/java/org/apache/james/transport/mailets
RemoteDelivery.java
Log:
Support MAIL FROM: <> delivery, and also changed to not change message_name on every failed delivery attempt.
Revision Changes Path
1.6 +35 -26 jakarta-james/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
Index: RemoteDelivery.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/transport/mailets/RemoteDelivery.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- RemoteDelivery.java 2001/06/21 16:04:53 1.5
+++ RemoteDelivery.java 2001/08/11 21:33:17 1.6
@@ -45,8 +45,8 @@
* @author Serge Knystautas <se...@lokitech.com>
* @author Federico Barbieri <sc...@pop.systemy.it>
*
- * This is $Revision: 1.5 $
- * Committed on $Date: 2001/06/21 16:04:53 $ by: $Author: charlesb $
+ * This is $Revision: 1.6 $
+ * Committed on $Date: 2001/08/11 21:33:17 $ by: $Author: serge $
*/
public class RemoteDelivery extends GenericMailet implements Runnable {
@@ -109,8 +109,10 @@
*
* Creation date: (2/24/00 11:25:00 PM)
* @param Mail org.apache.mailet.Mail
+ * @param Session javax.mail.Session
+ * @return boolean Whether the delivery was successful and the message can be deleted
*/
- private void deliver(MailImpl mail, Session session) {
+ private boolean deliver(MailImpl mail, Session session) {
try {
log("attempting to deliver " + mail.getName());
MimeMessage message = mail.getMessage();
@@ -135,8 +137,7 @@
targetServers = getMailetContext().getMailServers(host);
if (targetServers.size() == 0) {
log("No mail server found for: " + host);
- failMessage(mail, new MessagingException("No route found to " + host), true);
- return;
+ return failMessage(mail, new MessagingException("No route found to " + host), true);
}
} else {
targetServers = new Vector();
@@ -155,8 +156,13 @@
Properties props = session.getProperties();
//This was an older version of JavaMail
- props.put("mail.smtp.user", mail.getSender().toString());
- props.put("mail.smtp.from", mail.getSender().toString());
+ if (mail.getSender() == null) {
+ props.put("mail.smtp.user", "<>");
+ props.put("mail.smtp.from", "<>");
+ } else {
+ props.put("mail.smtp.user", mail.getSender().toString());
+ props.put("mail.smtp.from", mail.getSender().toString());
+ }
props.put("mail.debug", "false");
//Many of these properties are only in later JavaMail versions
@@ -173,7 +179,7 @@
transport.sendMessage(message, addr);
transport.close();
log("mail (" + mail.getName() + ") sent successfully to " + outgoingmailserver);
- return;
+ return true;
} catch (SendFailedException sfe) {
throw sfe;
} catch (MessagingException me) {
@@ -183,11 +189,10 @@
lastError = me;
continue;
} else {
- failMessage(mail, me, true);
- return;
+ return failMessage(mail, me, true);
}
}
- }// end while
+ } // end while
//If we encountered an exception while looping through, send the last exception we got
if (lastError != null) {
throw lastError;
@@ -211,8 +216,7 @@
}
}
}
- failMessage(mail, sfe, true);
- return;
+ return failMessage(mail, sfe, true);
} catch (MessagingException ex) {
//We should do a better job checking this... if the failure is a general
//connect exception, this is less descriptive than more specific SMTP command
@@ -220,24 +224,26 @@
//possibilities
//Unable to deliver message after numerous tries... fail accordingly
- failMessage(mail, ex, false);
- return;
+ return failMessage(mail, ex, false);
}
+ return true;
}
/**
* Insert the method's description here.
* Creation date: (2/25/00 1:14:18 AM)
- * @param mail org.apache.mailet.Mail
+ * @param mail org.apache.mailet.MailImpl
* @param exception java.lang.Exception
+ * @param boolean permanent
+ * @return boolean Whether the message failed fully and can be deleted
*/
- private void failMessage(MailImpl mail, MessagingException ex, boolean permanent) {
+ private boolean failMessage(MailImpl mail, MessagingException ex, boolean permanent) {
StringWriter sout = new StringWriter();
PrintWriter pout = new PrintWriter(sout, true);
if (permanent) {
- pout.println("Permanent");
+ pout.print("Permanent");
} else {
- pout.println("Temporary");
+ pout.print("Temporary");
}
pout.print(" exception delivering mail (" + mail.getName() + ": ");
ex.printStackTrace(pout);
@@ -249,17 +255,14 @@
}
int retries = Integer.parseInt(mail.getErrorMessage());
if (retries < maxRetries) {
- //Change the name (unique identifier) of this message... we want to save a new copy
- // of it, so change the unique idea for restoring
- mail.setName(mail.getName() + retries);
log("Storing message " + mail.getName() + " into outgoing after " + retries + " retries");
++retries;
mail.setErrorMessage(retries + "");
- outgoing.store(mail);
- return;
+ return false;
}
}
bounce(mail, ex);
+ return true;
}
private void bounce(MailImpl mail, MessagingException ex) {
@@ -356,8 +359,14 @@
String key = outgoing.accept(delayTime);
log(Thread.currentThread().getName() + " will process mail " + key);
MailImpl mail = outgoing.retrieve(key);
- deliver(mail, session);
- outgoing.remove(key);
+ if (deliver(mail, session)) {
+ //Message was successfully delivered/fully failed... delete it
+ outgoing.remove(key);
+ } else {
+ //Something happened that will delay delivery. Store any updates
+ outgoing.store(mail);
+ }
+ //Clear the object handle to make sure it recycles this object.
mail = null;
} catch (Exception e) {
log("Exception caught in RemoteDelivery.run(): " + e);
---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org