1 /**************************************************************** 2 * Licensed to the Apache Software Foundation (ASF) under one * 3 * or more contributor license agreements. See the NOTICE file * 4 * distributed with this work for additional information * 5 * regarding copyright ownership. The ASF licenses this file * 6 * to you under the Apache License, Version 2.0 (the * 7 * "License"); you may not use this file except in compliance * 8 * with the License. You may obtain a copy of the License at * 9 * * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, * 13 * software distributed under the License is distributed on an * 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 15 * KIND, either express or implied. See the License for the * 16 * specific language governing permissions and limitations * 17 * under the License. * 18 ****************************************************************/ 19 20 package org.apache.james.mime4j.field.address; 21 22 import java.util.ArrayList; 23 24 /** 25 * Represents a single e-mail address. 26 * 27 * 28 */ 29 public class Mailbox extends Address { 30 private DomainList route; 31 private String localPart; 32 private String domain; 33 34 /** 35 * Creates a mailbox without a route. Routes are obsolete. 36 * @param localPart The part of the e-mail address to the left of the "@". 37 * @param domain The part of the e-mail address to the right of the "@". 38 */ Mailbox(String localPart, String domain)39 public Mailbox(String localPart, String domain) { 40 this(null, localPart, domain); 41 } 42 43 /** 44 * Creates a mailbox with a route. Routes are obsolete. 45 * @param route The zero or more domains that make up the route. Can be null. 46 * @param localPart The part of the e-mail address to the left of the "@". 47 * @param domain The part of the e-mail address to the right of the "@". 48 */ Mailbox(DomainList route, String localPart, String domain)49 public Mailbox(DomainList route, String localPart, String domain) { 50 this.route = route; 51 this.localPart = localPart; 52 this.domain = domain; 53 } 54 55 /** 56 * Returns the route list. 57 */ getRoute()58 public DomainList getRoute() { 59 return route; 60 } 61 62 /** 63 * Returns the left part of the e-mail address 64 * (before "@"). 65 */ getLocalPart()66 public String getLocalPart() { 67 return localPart; 68 } 69 70 /** 71 * Returns the right part of the e-mail address 72 * (after "@"). 73 */ getDomain()74 public String getDomain() { 75 return domain; 76 } 77 78 /** 79 * Formats the address as a string, not including 80 * the route. 81 * 82 * @see #getAddressString(boolean) 83 */ getAddressString()84 public String getAddressString() { 85 return getAddressString(false); 86 } 87 88 /** 89 * Note that this value may not be usable 90 * for transport purposes, only display purposes. 91 * 92 * For example, if the unparsed address was 93 * 94 * <"Joe Cheng"@joecheng.com> 95 * 96 * this method would return 97 * 98 * <Joe Cheng@joecheng.com> 99 * 100 * which is not valid for transport; the local part 101 * would need to be re-quoted. 102 * 103 * @param includeRoute true if the route should be included if it exists. 104 */ getAddressString(boolean includeRoute)105 public String getAddressString(boolean includeRoute) { 106 return "<" + (!includeRoute || route == null ? "" : route.toRouteString() + ":") 107 + localPart 108 + (domain == null ? "" : "@") 109 + domain + ">"; 110 } 111 112 @Override doAddMailboxesTo(ArrayList<Address> results)113 protected final void doAddMailboxesTo(ArrayList<Address> results) { 114 results.add(this); 115 } 116 117 @Override toString()118 public String toString() { 119 return getAddressString(); 120 } 121 } 122