X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web%2FSystem.Web.Mail%2FMailMessageWrapper.cs;h=5cdeacb781ad0df468a87636d4e18211a065ecb3;hb=7a419ba4067bd798ee560bc747e51714733f61c3;hp=d04a59a88f0538cce978a18cdf07e7d76ef63af1;hpb=065c9875d84d04af6d1e23286c861db6c3e663d0;p=mono.git diff --git a/mcs/class/System.Web/System.Web.Mail/MailMessageWrapper.cs b/mcs/class/System.Web/System.Web.Mail/MailMessageWrapper.cs index d04a59a88f0..5cdeacb781a 100644 --- a/mcs/class/System.Web/System.Web.Mail/MailMessageWrapper.cs +++ b/mcs/class/System.Web/System.Web.Mail/MailMessageWrapper.cs @@ -1,28 +1,178 @@ -// MailMessageWrapper.cs -// author: Per Arneng +// +// System.Web.Mail.MailMessageWrapper.cs +// +// Author(s): +// Per Arneng +// Sanjay Gupta +// +// (C) 2004, Novell, Inc. (http://www.novell.com) +// +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// using System; using System.Collections; using System.Text; namespace System.Web.Mail { + // wraps a MailMessage to make an easier + // interface to work with collections of + // addresses instead of a single string internal class MailMessageWrapper { private MailAddressCollection bcc = new MailAddressCollection(); private MailAddressCollection cc = new MailAddressCollection(); private MailAddress from; private MailAddressCollection to = new MailAddressCollection(); + private MailHeader header = new MailHeader(); private MailMessage message; + private string body; // Constructor public MailMessageWrapper( MailMessage message ) { this.message = message; - if(message.From != null ) from = MailAddress.Parse( message.From ); - if(message.To != null ) to = MailAddressCollection.Parse( message.To ); - if(message.Cc != null )cc = MailAddressCollection.Parse( message.Cc ); - if(message.Bcc != null )bcc = MailAddressCollection.Parse( message.Bcc ); + if( message.From != null ) { + from = MailAddress.Parse( message.From ); + header.From = from.ToString(); + } + + if( message.To != null ) { + to = MailAddressCollection.Parse( message.To ); + header.To = to.ToString(); + } + + if( message.Cc != null ) { + cc = MailAddressCollection.Parse( message.Cc ); + header.Cc = cc.ToString(); + } + + if( message.Bcc != null ) { + bcc = MailAddressCollection.Parse( message.Bcc ); + header.Bcc = bcc.ToString(); + } + + // set the subject + if( message.Subject != null ) { + + // encode the subject if it needs encoding + if( MailUtil.NeedEncoding( message.Subject ) ) { + + byte[] subjectBytes = message.BodyEncoding.GetBytes( message.Subject ); + // encode the subject with Base64 + header.Subject = String.Format( "=?{0}?B?{1}?=" , + message.BodyEncoding.BodyName , + Convert.ToBase64String( subjectBytes ) ); + } else { + + header.Subject = message.Subject; + + } + } + + // convert single '.' on a line with ".." to not + // confuse the smtp server since the DATA command + // is terminated with a '.' on a single line. + // this is also according to the smtp specs. + if( message.Body != null ) { + body = message.Body.Replace( "\n.\n" , "\n..\n" ); + body = body.Replace( "\r\n.\r\n" , "\r\n..\r\n" ); + } + + + // set the Contet-Base header + if( message.UrlContentBase != null ) + header.ContentBase = message.UrlContentBase; + + // set the Contet-Location header + if( message.UrlContentLocation != null ) + header.ContentLocation = message.UrlContentLocation; + + + // set the content type + switch( message.BodyFormat ) { + + case MailFormat.Html: + header.ContentType = + String.Format( "text/html; charset=\"{0}\"" , message.BodyEncoding.BodyName ); + break; + + case MailFormat.Text: + header.ContentType = + String.Format( "text/plain; charset=\"{0}\"" , message.BodyEncoding.BodyName ); + break; + + default: + header.ContentType = + String.Format( "text/html; charset=\"{0}\"" , message.BodyEncoding.BodyName ); + break; + } + + + // set the priority as in the same way as .NET sdk does + switch( message.Priority ) { + + case MailPriority.High: + header.Importance = "high"; + break; + + case MailPriority.Low: + header.Importance = "low"; + break; + + case MailPriority.Normal: + header.Importance = "normal"; + break; + + default: + header.Importance = "normal"; + break; + + } + + // .NET sdk allways sets this to normal + header.Priority = "normal"; + + + // Set the mime version + header.MimeVersion = "1.0"; + + // Set the transfer encoding + if( message.BodyEncoding is ASCIIEncoding ) { + header.ContentTransferEncoding = "7bit"; + } else { + header.ContentTransferEncoding = "8bit"; + } + + // Add Date header, we were missing earlier 27/08/04 + // RFC822 requires date to be in format Fri, 27 Aug 2004 20:13:20 +0530 + //DateTime.Now gives in format 8/27/2004 8:13:00 PM + // Need to explore further dateTime formats available or do we need + // to write a function to convert. + //header.Data.Add ("Date", DateTime.Now.ToString()); + + // Add the custom headers + foreach( string key in message.Headers.Keys ) + header.Data[ key ] = (string)this.message.Headers[ key ]; } // Properties @@ -35,8 +185,8 @@ namespace System.Web.Mail { } public string Body { - get { return message.Body; } - set { message.Body = value; } + get { return body; } + set { body = value; } } public Encoding BodyEncoding { @@ -57,8 +207,8 @@ namespace System.Web.Mail { get { return from; } } - public IDictionary Headers { - get { return message.Headers; } + public MailHeader Header { + get { return header; } } public MailPriority Priority { @@ -83,6 +233,19 @@ namespace System.Web.Mail { public string UrlContentLocation { get { return message.UrlContentLocation; } } - } +#if NET_1_1 + public MailHeader Fields { + get { + MailHeader bodyHeaders = new MailHeader(); + // Add Fields to MailHeader Object + foreach( string key in message.Fields.Keys ) + bodyHeaders.Data[ key ] = this.message.Fields[ key ].ToString(); + + return bodyHeaders; + } + + } +#endif + } }