noel 2003/08/28 09:06:20
Modified: src/java/org/apache/james/core Tag: branch_2_1_fcs
MailImpl.java
Log:
RFC 2822 section 3.4 says that To: fields don't have to have <>. Also, the Mail
object's idea of Sender, which is really the SMTP MAIL FROM: <reverse-path> parameter,
should come from the Return-Path. Next step should be to deprecate
setSender/getSender for setReversePath/getReversePath.
Revision Changes Path
No revision
No revision
1.17.4.5 +43 -8 james-server/src/java/org/apache/james/core/MailImpl.java
Index: MailImpl.java
===================================================================
RCS file: /home/cvs/james-server/src/java/org/apache/james/core/MailImpl.java,v
retrieving revision 1.17.4.4
retrieving revision 1.17.4.5
diff -u -r1.17.4.4 -r1.17.4.5
--- MailImpl.java 17 Jul 2003 13:26:12 -0000 1.17.4.4
+++ MailImpl.java 28 Aug 2003 16:06:20 -0000 1.17.4.5
@@ -205,18 +205,53 @@
*/
public MailImpl(MimeMessage message) throws MessagingException {
this();
- Address[] addresses;
- addresses = message.getFrom();
- MailAddress sender = new MailAddress(new
InternetAddress(addresses[0].toString()));
- Collection recipients = new ArrayList();
- addresses = message.getRecipients(MimeMessage.RecipientType.TO);
- for (int i = 0; i < addresses.length; i++) {
- recipients.add(new MailAddress(new
InternetAddress(addresses[i].toString())));
+ MailAddress sender = getReturnPath(message);
+ Collection recipients = null;
+ Address[] addresses = message.getRecipients(MimeMessage.RecipientType.TO);
+ if (addresses != null) {
+ recipients = new ArrayList();
+ for (int i = 0; i < addresses.length; i++) {
+ try {
+ recipients.add(new MailAddress(new
InternetAddress(addresses[i].toString(), false)));
+ } catch (ParseException pe) {
+ // RFC 2822 section 3.4 allows To: fields without <>
+ // Let's give this one more try with <>.
+ try {
+ recipients.add(new MailAddress("<" + new
InternetAddress(addresses[i].toString()).toString() + ">"));
+ } catch (ParseException _) {
+ throw new MessagingException("Could not parse address: " +
addresses[i].toString() + " from " + message.getHeader(RFC2822Headers.TO, ", "), pe);
+ }
+ }
+ }
}
this.name = message.toString();
this.sender = sender;
this.recipients = recipients;
this.setMessage(message);
+ }
+ /**
+ * Gets the MailAddress corresponding to the existing "Return-Path" of
+ * <I>message</I>.
+ * If missing or empty returns <CODE>null</CODE>,
+ */
+ private MailAddress getReturnPath(MimeMessage message) throws
MessagingException {
+ MailAddress mailAddress = null;
+ String[] returnPathHeaders = message.getHeader(RFC2822Headers.RETURN_PATH);
+ String returnPathHeader = null;
+ if (returnPathHeaders != null) {
+ returnPathHeader = returnPathHeaders[0];
+ if (returnPathHeader != null) {
+ returnPathHeader = returnPathHeader.trim();
+ if (!returnPathHeader.equals("<>")) {
+ try {
+ mailAddress = new MailAddress(new
InternetAddress(returnPathHeader, false));
+ } catch (ParseException pe) {
+ throw new MessagingException("Could not parse address: " +
returnPathHeader + " from " + message.getHeader(RFC2822Headers.RETURN_PATH, ", "), pe);
+ }
+ }
+ }
+ }
+ return mailAddress;
}
/**
* Duplicate the MailImpl.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]