in geronimo-javamail_1.5/geronimo-javamail_1.5_provider/src/main/java/org/apache/geronimo/javamail/store/imap/connection/IMAPResponseTokenizer.java [968:1039]
public InternetAddress readAddress() throws MessagingException {
// we recurse, expecting a null response back for sublists.
if (peek().getType() != '(') {
return null;
}
// must start with a paren
checkLeftParen();
// personal information
String personal = readStringOrNil();
// the domain routine information.
String routing = readStringOrNil();
// the target mailbox
String mailbox = readStringOrNil();
// and finally the host
String host = readStringOrNil();
// and validate the closing paren
checkRightParen();
// if this is a real address, we need to compose
if (host != null) {
StringBuffer address = new StringBuffer();
if (routing != null) {
address.append(routing);
address.append(':');
}
address.append(mailbox);
address.append('@');
address.append(host);
try {
return new InternetAddress(address.toString(), personal);
} catch (UnsupportedEncodingException e) {
throw new ResponseFormatException("Invalid Internet address format");
}
}
else {
// we're going to recurse on this. If the mailbox is null (the group name), this is the group item
// terminator.
if (mailbox == null) {
return null;
}
StringBuffer groupAddress = new StringBuffer();
groupAddress.append(mailbox);
groupAddress.append(':');
int count = 0;
while (true) {
// now recurse until we hit the end of the list
InternetAddress member = readAddress();
if (member == null) {
groupAddress.append(';');
try {
return new InternetAddress(groupAddress.toString(), personal);
} catch (UnsupportedEncodingException e) {
throw new ResponseFormatException("Invalid Internet address format");
}
}
else {
if (count != 0) {
groupAddress.append(',');
}
groupAddress.append(member.toString());
count++;
}
}
}
}