// ----------------------------------------------------------------------- // // Copyright (C) 2003-2006 Angel Marin // // This file is part of SharpMimeTools // // SharpMimeTools is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // SharpMimeTools 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with SharpMimeTools; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // // ----------------------------------------------------------------------- using System; namespace anmar.SharpMimeTools { internal class SharpMimeAddressCollection : System.Collections.IEnumerable { protected System.Collections.ArrayList list = new System.Collections.ArrayList(); public SharpMimeAddressCollection ( System.String text ) { System.String[] tokens = anmar.SharpMimeTools.ABNF.address_regex.Split(text); foreach ( System.String token in tokens ) { if ( anmar.SharpMimeTools.ABNF.address_regex.IsMatch(token ) ) this.Add ( new anmar.SharpMimeTools.SharpMimeAddress( token ) ); } } public anmar.SharpMimeTools.SharpMimeAddress this [ int index ] { get { return this.Get( index ); } } public System.Collections.IEnumerator GetEnumerator() { return list.GetEnumerator(); } public void Add ( anmar.SharpMimeTools.SharpMimeAddress address ) { list.Add ( address); } public anmar.SharpMimeTools.SharpMimeAddress Get ( int index ) { return (anmar.SharpMimeTools.SharpMimeAddress) list[index]; } public static anmar.SharpMimeTools.SharpMimeAddressCollection Parse( System.String text ) { if ( text == null ) throw new ArgumentNullException(); return new anmar.SharpMimeTools.SharpMimeAddressCollection ( text ); } public int Count { get { return list.Count; } } public override string ToString() { System.Text.StringBuilder text = new System.Text.StringBuilder(); foreach ( anmar.SharpMimeTools.SharpMimeAddress token in list ) { text.Append ( token.ToString() ); if ( token.Length>0 ) text.Append ("; "); } return text.ToString(); } } /// /// rfc 2822 email address /// public class SharpMimeAddress { private System.String name; private System.String address; /// /// Initializes a new address from a RFC 2822 name-addr specification string /// /// RFC 2822 name-addr address /// public SharpMimeAddress ( System.String dir ) { name = anmar.SharpMimeTools.SharpMimeTools.parseFrom ( dir, 1 ); address = anmar.SharpMimeTools.SharpMimeTools.parseFrom ( dir, 2 ); } /// /// Gets the decoded address or name contained in the name-addr /// public System.String this [System.Object key] { get { if ( key == null ) throw new System.ArgumentNullException(); switch (key.ToString()) { case "0": case "name": return this.name; case "1": case "address": return this.address; } return null; } } /// /// /// /// public override System.String ToString() { if ( this.name.Equals (System.String.Empty ) && this.address.Equals (System.String.Empty ) ) return ""; if ( this.name.Equals (System.String.Empty ) ) return String.Format( "<{0}>", this.address); else return String.Format( "\"{0}\" <{1}>" , this.name , this.address); } /// /// Gets the length of the decoded address /// public int Length { get { return this.name.Length + this.address.Length; } } } }