|
What this is
Other links
The source code/** * Address.java * * Bill Lynch * CoolServlets.com * April 21 1999 * * Email Package Version 1.1 * * Copyright (C) 1999 Bill Lynch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.coolservlets.email; import java.util.*; /** * Address class * * This class is designed to store an email address. An email address consists * of either a <name> and or just an . * * A <name> is any string that does NOT contain the ASCII characters, 0-31, 127 and 34. * (Control characters, DEL, and quotes). * * An <address> is any string that does NOT contain the ASCII character, 0-31, 127 and 34. * (Control characters, DEL, and quotes). Additionally, it must have a "@" symbol and it * must not have any spaces. * * When an email address or email name is added, it's checked for validity. A * MalformedAddressException will be thrown if something isn't right. * * Public Methods: * Address() * Address( String personal, String address ) * Address( String address ) * String getAddress() * String getPersonal() * void setAddress( String address ) throws MalformedAddressException * void setPersonal( String name ) throws MalformedAddressException * static Address[] parse( String addressList ) * * Private Methods/Fields: * boolean checkPersonal( String name ) * boolean checkAddress( String address ) * String address; * String personal; */ public class Address { /** * Constructs an Address object with an email name and address specified. * ie, Address a = new Address( "Joe Bloe", "jbloe@bloe.net" ); */ public Address( String personal, String address ) { try { setPersonal( personal ); setAddress( address ); } catch( MalformedAddressException mae ) {} } /** * Constructs an Address object with an email address specified. * ie, Address a = new Address( "jbloe@bloe.net" ); */ public Address( String address ) { this.personal = null; try { setAddress( address ); } catch( MalformedAddressException mae ) {} } /** * Returns the email address. * ie, will return "jbloe@bloe.net" (without quotes) */ public String getAddress() { return address; } /** * Retunrs the email name. * ie, will return "Joe Bloe" (without quotes) */ public String getPersonal() { return personal; } /** * This method checks the given string and makes sure that * it's a valid email address. (ie, has an "@" symbol, etc). * If it's not valid, an exception is thrown. * This is done to ensure that email addresses being sent (via * the transport class) are valid. */ public void setAddress( String address ) throws MalformedAddressException { if( checkAddress( address ) ) this.address = address; else throw new MalformedAddressException( "Invalid email address" ); } /** * Checks the personal email name (much like setAddress(...) ). */ public void setPersonal( String name ) throws MalformedAddressException { if( checkPersonal( name ) ) this.personal = name; else throw new MalformedAddressException( "Invalid personal email name" ); } /** * Will parse a string of email address. When an unresovable email address * is encountered, it is skipped. * * Use: * Passing in "Bill,bill@place.com,Matt,matt@place.com" results in an array * of two Address objects. (One has "Bill" and "bill@place.com" and the other * has "Matt" and "matt@place.com".) * * Passing in "Bill,bill@place.com,matt@place.com" results in an array * of two Address objects. (This is exactly similiar to the last example, only * the second object only has "matt@place.com" stored -- NO email name.) * * Passing in "Bill,Bob,Ben,bill@place.com" results in an array with one * Address object. It stores "Ben" as the name and "bill@place.com" as the * email address. (It ignores the first 2 names because they're not associated * with an email address.) */ public static Address[] parse( String addressList ) { Vector addresses = new Vector(); StringTokenizer st = new StringTokenizer( addressList, "," ); String s = null, personal = null, addr = null; int numTokens = st.countTokens(); while( st.hasMoreTokens() ) { s = st.nextToken(); numTokens--; personal = null; addr = null; if( s.indexOf("@") == -1 ) // Not an email address, so it's a name { numTokens--; personal = s; if( numTokens >= 0 ) { addr = st.nextToken(); if( addr.indexOf( "@" ) > 0 ) addresses.addElement( new Address( personal, addr ) ); } } else // it's an email address if( s.indexOf( "@" ) > 0 ) // make sure that it really is an email address addresses.addElement( new Address( s ) ); } Address[] a = new Address[addresses.size()]; addresses.copyInto( a ); return a; } /** * Checks the personal email name for errors. */ private boolean checkPersonal( String name ) { char ch; for( int i=0; i<name.length(); i++ ) { ch=name.charAt(i); if( (ch>=0 && ch<=31) || (ch==34) || (ch==127) ) return false; } return true; /* // This would actually fix the email address // by replacing invalid characters with spaces. StringBuffer sb = new StringBuffer(); for( int i=0; i<name.length(); i++ ) { char ch = name.charAt(i); if( (ch>=0 && ch<=31) || (ch==34) || (ch==127) ) sb.append( " " ); else sb.append( ch ); } */ } /** * Checks the email address for errors. */ private boolean checkAddress( String address ) { boolean ok = false; int atPos = address.indexOf( "@" ); // Check for the "@" symbol. It should not be at the // beginning or end of the email address string. if( (atPos <= 0) || (atPos == address.length()-1) ) ok = false; else { if( address.indexOf( " " ) > -1 ) // No spaces allowed in an email address ok = false; else ok = true; } // One final check for invalid characters: char ch; for( int i=0; i<address.length(); i++ ) { ch = address.charAt(i); if( (ch>=0 && ch<=31) || (ch==34) || (ch==127) ) { ok = false; break; } } return ok; } // Data private String address; private String personal; } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.