javax.mail.internet
Class InternetAddress

java.lang.Object
  extended byjavax.mail.Address
      extended byjavax.mail.internet.InternetAddress
All Implemented Interfaces:
java.lang.Cloneable, java.io.Serializable

public class InternetAddress
extends Address
implements java.lang.Cloneable

A representation of an Internet email address as specified by RFC822 in conjunction with a human-readable personal name that can be encoded as specified by RFC2047. A typical address is "user@host.domain" and personal name "Joe User"

Version:
$Rev: 149170 $ $Date: 2005-01-30 15:21:08 -0700 (Sun, 30 Jan 2005) $
See Also:
Serialized Form

Field Summary
protected  java.lang.String address
          The address in RFC822 format.
private static byte[] CHARMAP
           
protected  java.lang.String encodedPersonal
          The personal name in RFC2047 format.
private static byte FLG_CONTROL
           
private static byte FLG_SPACE
           
private static byte FLG_SPECIAL
           
protected  java.lang.String personal
          The personal name as a Java String.
 
Constructor Summary
InternetAddress()
           
InternetAddress(java.lang.String address)
           
InternetAddress(java.lang.String address, boolean strict)
           
InternetAddress(java.lang.String address, java.lang.String personal)
           
InternetAddress(java.lang.String address, java.lang.String personal, java.lang.String charset)
           
 
Method Summary
 java.lang.Object clone()
          Clone this object.
 boolean equals(java.lang.Object o)
          Compares two addresses for equality.
private  int expectPhrase(java.lang.String s, int index)
           
private  int expectWord(java.lang.String s, int index)
           
 java.lang.String getAddress()
          Return the address.
private  java.lang.String getEncodedPersonal()
          Return the encoded form of the personal name.
 InternetAddress[] getGroup(boolean strict)
          Return the members of a group address.
static InternetAddress getLocalAddress(Session session)
          Return an InternetAddress representing the current user.
 java.lang.String getPersonal()
          Return the personal name.
 java.lang.String getType()
          Return the type of this address.
 int hashCode()
          Return the hashCode for this address.
private static void init(InternetAddress addr, java.lang.String text)
           
private static boolean isAtom(char c)
           
 boolean isGroup()
          Return true is this address is an RFC822 group address in the format phrase ":" [#mailbox] ";".
private static boolean isSpace(char c)
           
static InternetAddress[] parse(java.lang.String addresses)
          Parse addresses out of the string with basic checking.
static InternetAddress[] parse(java.lang.String addresses, boolean strict)
          Parse addresses out of the string.
private static InternetAddress[] parse(java.lang.String addresses, boolean strict, boolean veryStrict)
          Parse addresses with increasing degrees of RFC822 compliance checking.
(package private) static void parseHeader(java.util.List target, java.lang.String addresses, boolean strict, boolean veryStrict)
           
static InternetAddress[] parseHeader(java.lang.String addresses, boolean strict)
          Parse addresses out of the string.
private  java.lang.StringBuffer quote(java.lang.StringBuffer buf, java.lang.String text)
          Add RFC822 quotes to a String if needed.
 void setAddress(java.lang.String address)
          Set the address.
 void setPersonal(java.lang.String name)
          Set the personal name.
 void setPersonal(java.lang.String name, java.lang.String charset)
          Set the personal name.
private  int skipComment(java.lang.String s, int index)
           
private  int skipSpace(java.lang.String s, int index)
           
 java.lang.String toString()
          Return a string representation of this address using only US-ASCII characters.
static java.lang.String toString(Address[] addresses)
          Convert the supplied addresses into a single String of comma-separated text as produced by toString().
static java.lang.String toString(Address[] addresses, int used)
          Convert the supplies addresses into a String of comma-separated text, inserting line-breaks between addresses as needed to restrict the line length to 72 characters.
 java.lang.String toUnicodeString()
          Return a string representation of this address using Unicode characters.
 void validate()
           
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

address

protected java.lang.String address
The address in RFC822 format.


encodedPersonal

protected java.lang.String encodedPersonal
The personal name in RFC2047 format. Subclasses must ensure that this field is updated if the personal field is updated; alternatively, it can be invalidated by setting to null which will cause it to be recomputed.


personal

protected java.lang.String personal
The personal name as a Java String. Subclasses must ensure that this field is updated if the encodedPersonal field is updated; alternatively, it can be invalidated by setting to null which will cause it to be recomputed.


CHARMAP

private static final byte[] CHARMAP

FLG_SPECIAL

private static final byte FLG_SPECIAL
See Also:
Constant Field Values

FLG_CONTROL

private static final byte FLG_CONTROL
See Also:
Constant Field Values

FLG_SPACE

private static final byte FLG_SPACE
See Also:
Constant Field Values
Constructor Detail

InternetAddress

public InternetAddress()

InternetAddress

public InternetAddress(java.lang.String address)
                throws AddressException

InternetAddress

public InternetAddress(java.lang.String address,
                       boolean strict)
                throws AddressException

InternetAddress

public InternetAddress(java.lang.String address,
                       java.lang.String personal)
                throws java.io.UnsupportedEncodingException

InternetAddress

public InternetAddress(java.lang.String address,
                       java.lang.String personal,
                       java.lang.String charset)
                throws java.io.UnsupportedEncodingException
Method Detail

clone

public java.lang.Object clone()
Clone this object.

Returns:
a copy of this object as created by Object.clone()

getType

public java.lang.String getType()
Return the type of this address.

Specified by:
getType in class Address
Returns:
the type of this address; always "rfc822"

setAddress

public void setAddress(java.lang.String address)
Set the address. No validation is performed; validate() can be used to check if it is valid.

Parameters:
address - the address to set

setPersonal

public void setPersonal(java.lang.String name,
                        java.lang.String charset)
                 throws java.io.UnsupportedEncodingException
Set the personal name. The name is first checked to see if it can be encoded; if this fails then an UnsupportedEncodingException is thrown and no fields are modified.

Parameters:
name - the new personal name
charset - the charset to use; see MimeUtilityencodeWord
Throws:
java.io.UnsupportedEncodingException - if the name cannot be encoded

setPersonal

public void setPersonal(java.lang.String name)
                 throws java.io.UnsupportedEncodingException
Set the personal name. The name is first checked to see if it can be encoded using MimeUtility.encodeWord(String); if this fails then an UnsupportedEncodingException is thrown and no fields are modified.

Parameters:
name - the new personal name
Throws:
java.io.UnsupportedEncodingException - if the name cannot be encoded

getAddress

public java.lang.String getAddress()
Return the address.

Returns:
the address

getPersonal

public java.lang.String getPersonal()
Return the personal name. If the personal field is null, then an attempt is made to decode the encodedPersonal field using MimeUtility.decodeWord(String); if this is sucessful, then the personal field is updated with that value and returned; if there is a problem decoding the text then the raw value from encodedPersonal is returned.

Returns:
the personal name

getEncodedPersonal

private java.lang.String getEncodedPersonal()
Return the encoded form of the personal name. If the encodedPersonal field is null, then an attempt is made to encode the personal field using MimeUtility.encodeWord(String); if this is successful then the encodedPersonal field is updated with that value and returned; if there is a problem encoding the text then null is returned.

Returns:
the encoded form of the personal name

quote

private java.lang.StringBuffer quote(java.lang.StringBuffer buf,
                                     java.lang.String text)
Add RFC822 quotes to a String if needed. It is assumed the text passed in has already been converted to US-ASCII.

Parameters:
buf - a buffer to write into
text - the text to quote
Returns:
the supplied buffer

toString

public java.lang.String toString()
Return a string representation of this address using only US-ASCII characters.

Specified by:
toString in class Address
Returns:
a string representation of this address

toUnicodeString

public java.lang.String toUnicodeString()
Return a string representation of this address using Unicode characters.

Returns:
a string representation of this address

equals

public boolean equals(java.lang.Object o)
Compares two addresses for equality. We define this as true if the other object is an InternetAddress and the two values returned by getAddress() are equal in a case-insensitive comparison.

Specified by:
equals in class Address
Parameters:
o - the other object
Returns:
true if the addresses are the same

hashCode

public int hashCode()
Return the hashCode for this address. We define this to be the hashCode of the address after conversion to lowercase.

Returns:
a hashCode for this address

isGroup

public boolean isGroup()
Return true is this address is an RFC822 group address in the format phrase ":" [#mailbox] ";". We check this by seeing stripping the leading phrase (which, for tolerance, we consider optional) and then checking if the first and last characters are ':' and ';' respectively.

Returns:
true is this address represents a group

getGroup

public InternetAddress[] getGroup(boolean strict)
                           throws AddressException
Return the members of a group address. If strict is true and the address does not contain an initial phrase then an AddressException is thrown. Otherwise the phrase is skipped and the remainder of the address is checked to see if it is a group. If it is, the content and strict flag are passed to parseHeader to extract the list of addresses; if it is not a group then null is returned.

Parameters:
strict - whether strict RFC822 checking should be performed
Returns:
an array of InternetAddress objects for the group members, or null if this address is not a group
Throws:
AddressException - if there was a problem parsing the header

getLocalAddress

public static InternetAddress getLocalAddress(Session session)
Return an InternetAddress representing the current user.

If session is not null, we first look for an address specified in its "mail.from" property; if this is not set, we look at its "mail.user" and "mail.host" properties and if both are not null then an address of the form "${mail.user}@${mail.host}" is created. If this fails to give an address, then an attempt is made to create an address by combining the value of the "user.name" System property with the value returned from InetAddress.getLocalHost().getHostName(). Any SecurityException raised accessing the system property or any UnknownHostException raised getting the hostname are ignored.

Finally, an attempt is made to convert the value obtained above to an InternetAddress. If this fails, then null is returned.

Parameters:
session - used to obtain mail properties
Returns:
an InternetAddress for the current user, or null if it cannot be determined

toString

public static java.lang.String toString(Address[] addresses)
Convert the supplied addresses into a single String of comma-separated text as produced by toString(). No line-break detection is performed.

Parameters:
addresses - the array of addresses to convert
Returns:
a one-line String of comma-separated addresses

toString

public static java.lang.String toString(Address[] addresses,
                                        int used)
Convert the supplies addresses into a String of comma-separated text, inserting line-breaks between addresses as needed to restrict the line length to 72 characters. Splits will only be introduced between addresses so an address longer than 71 characters will still be placed on a single line.

Parameters:
addresses - the array of addresses to convert
used - the starting column
Returns:
a String of comma-separated addresses with optional line breaks

parse

public static InternetAddress[] parse(java.lang.String addresses)
                               throws AddressException
Parse addresses out of the string with basic checking.

Parameters:
addresses - the addresses to parse
Returns:
an array of InternetAddresses parsed from the string
Throws:
AddressException - if addresses checking fails

parse

public static InternetAddress[] parse(java.lang.String addresses,
                                      boolean strict)
                               throws AddressException
Parse addresses out of the string.

Parameters:
addresses - the addresses to parse
strict - if true perform detailed checking, if false just perform basic checking
Returns:
an array of InternetAddresses parsed from the string
Throws:
AddressException - if address checking fails

parseHeader

public static InternetAddress[] parseHeader(java.lang.String addresses,
                                            boolean strict)
                                     throws AddressException
Parse addresses out of the string.

Parameters:
addresses - the addresses to parse
strict - if true perform detailed checking, if false perform little checking
Returns:
an array of InternetAddresses parsed from the string
Throws:
AddressException - if address checking fails

parse

private static InternetAddress[] parse(java.lang.String addresses,
                                       boolean strict,
                                       boolean veryStrict)
                                throws AddressException
Parse addresses with increasing degrees of RFC822 compliance checking.

Parameters:
addresses - the string to parse
strict - if true, performs basic address checking
veryStrict - if true performs detailed address checking
Returns:
an array of InternetAddresses parsed from the string
Throws:
AddressException - if address checking fails

parseHeader

static void parseHeader(java.util.List target,
                        java.lang.String addresses,
                        boolean strict,
                        boolean veryStrict)
                 throws AddressException
Throws:
AddressException

init

private static void init(InternetAddress addr,
                         java.lang.String text)

validate

public void validate()
              throws AddressException
Throws:
AddressException

expectPhrase

private int expectPhrase(java.lang.String s,
                         int index)

expectWord

private int expectWord(java.lang.String s,
                       int index)

skipSpace

private int skipSpace(java.lang.String s,
                      int index)

skipComment

private int skipComment(java.lang.String s,
                        int index)

isSpace

private static boolean isSpace(char c)

isAtom

private static boolean isAtom(char c)