Minor update. MailUtil used in MailAddress
[mono.git] / mcs / class / System.Web / System.Web.Mail / MailAddress.cs
1 //
2 // System.Web.Mail.MailAddress.cs
3 //
4 // Author(s):
5 //   Per Arneng <pt99par@student.bth.se>
6 //
7 //
8 using System;
9 using System.Text;
10
11 namespace System.Web.Mail {
12
13     // Reperesents a mail address
14     internal class MailAddress {
15         
16         protected string user;
17         protected string host;
18         protected string name;
19         
20         public string User {
21             get { return user; }
22             set { user = value; }
23         }
24
25         public string Host {
26             get { return host; }
27             set { host = value; }
28         }
29
30         public string Name {
31             get { return name; }
32             set { name = value; }
33         }
34
35         public string Address {
36             get { return String.Format( "{0}@{1}" , user , host ); }
37             set {
38                 
39                 string[] parts = value.Split( new char[] { '@' } );
40                 
41                 if( parts.Length != 2 ) 
42                     throw new FormatException( "Invalid e-mail address: '" + value + "'.");
43                 
44                 user = parts[ 0 ];
45                 host = parts[ 1 ];
46             }
47         }
48
49         public static MailAddress Parse( string str ) {
50             MailAddress addr = new MailAddress();
51             string address = null;
52             string nameString = null;
53             string[] parts = str.Split( new char[] { ' ' } );
54             
55             // find the address: xxx@xx.xxx
56             // and put to gether all the parts
57             // before the address as nameString
58             foreach( string part in parts ) {
59                 
60                 if( part.IndexOf( '@' ) > 0 ) {
61                     address = part;
62                     break;
63                 }
64                 
65                 nameString = nameString + part + " ";
66             }
67
68             if( address == null ) 
69                 throw new FormatException( "Invalid e-mail address: '" + str + "'.");
70             
71             address = address.Trim( new char[] { '<' , '>' , '(' , ')' } );
72             
73             addr.Address = address;
74             
75             if( nameString != null ) {
76                 addr.Name = nameString.Trim();
77                 addr.Name = ( addr.Name.Length == 0 ? null : addr.Name ); 
78             }
79             
80             
81             return addr;
82         } 
83     
84     
85         public override string ToString() {
86             
87             string retString = "";
88         
89             if( name == null ) {
90                 
91                 retString = String.Format( "<{0}>" , this.Address );
92             
93             } else {
94                 
95                 string personName = this.Name;
96
97                 if( MailUtil.NeedEncoding( personName ) ) {
98                     personName = String.Format( "=?{0}?B?{1}?=",
99                                                 Encoding.Default , 
100                                                 MailUtil.Base64Encode( personName ) ) ;
101                 }
102
103                 retString = String.Format( "\"{0}\" <{1}>" , personName , this.Address);
104             
105             }
106             
107             return retString;
108         }
109     }
110
111 }