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]

Reply via email to