Code:
                         / 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / Mail / MailHeaderInfo.cs / 1305376 / MailHeaderInfo.cs
                        
                        
                            using System; 
using System.Collections.Specialized;
using System.Net.Mail;
using System.Globalization;
using System.Collections.Generic; 
namespace System.Net.Mail { 
 
    // Enumeration of the well-known headers.
    // If you add to this enum you MUST also add the appropriate initializer in m_HeaderInfo below. 
    internal enum MailHeaderID {
        Bcc = 0,
        Cc,
        Comments, 
        ContentDescription,
        ContentDisposition, 
        ContentID, 
        ContentLocation,
        ContentTransferEncoding, 
        ContentType,
        Date,
        From,
        Importance, 
        InReplyTo,
        Keywords, 
        Max, 
        MessageID,
        MimeVersion, 
        Priority,
        References,
        ReplyTo,
        ResentBcc, 
        ResentCc,
        ResentDate, 
        ResentFrom, 
        ResentMessageID,
        ResentSender, 
        ResentTo,
        Sender,
        Subject,
        To, 
        XPriority,
        XReceiver, 
        XSender, 
        ZMaxEnumValue = XSender,  // Keep this to equal to the last "known" enum entry if you add to the end
        Unknown = -1 
    }
    internal static class MailHeaderInfo {
 
        // Structure that wraps information about a single mail header
        private struct HeaderInfo { 
            public readonly string NormalizedName; 
            public readonly bool IsSingleton;
            public readonly MailHeaderID ID; 
            public readonly bool IsUserSettable;
            public HeaderInfo(MailHeaderID id, string name, bool isSingleton, bool isUserSettable) {
                ID = id;
                NormalizedName = name; 
                IsSingleton = isSingleton;
                IsUserSettable = isUserSettable; 
            } 
        }
 
        // Table of well-known mail headers.
        // Keep the initializers in [....] with the enum above. 
        private static readonly HeaderInfo[] m_HeaderInfo = {
            //             ID                                     NormalizedString             IsSingleton      IsUserSettable 
            new HeaderInfo(MailHeaderID.Bcc,                      "Bcc",                       true,            false), 
            new HeaderInfo(MailHeaderID.Cc,                       "Cc",                        true,            false),
            new HeaderInfo(MailHeaderID.Comments,                 "Comments",                  false,           true), 
            new HeaderInfo(MailHeaderID.ContentDescription,       "Content-Description",       true,            true),
            new HeaderInfo(MailHeaderID.ContentDisposition,       "Content-Disposition",       true,            true),
            new HeaderInfo(MailHeaderID.ContentID,                "Content-ID",                true,            false),
            new HeaderInfo(MailHeaderID.ContentLocation,          "Content-Location",          true,            false), 
            new HeaderInfo(MailHeaderID.ContentTransferEncoding,  "Content-Transfer-Encoding", true,            false),
            new HeaderInfo(MailHeaderID.ContentType,              "Content-Type",              true,            false), 
            new HeaderInfo(MailHeaderID.Date,                     "Date",                      true,            false), 
            new HeaderInfo(MailHeaderID.From,                     "From",                      true,            false),
            new HeaderInfo(MailHeaderID.Importance,               "Importance",                true,            false), 
            new HeaderInfo(MailHeaderID.InReplyTo,                "In-Reply-To",               true,            true),
            new HeaderInfo(MailHeaderID.Keywords,                 "Keywords",                  false,           true),
            new HeaderInfo(MailHeaderID.Max,                      "Max",                       false,           true),
            new HeaderInfo(MailHeaderID.MessageID,                "Message-ID",                true,            true), 
            new HeaderInfo(MailHeaderID.MimeVersion,              "MIME-Version",              true,            false),
            new HeaderInfo(MailHeaderID.Priority,                 "Priority",                  true,            false), 
            new HeaderInfo(MailHeaderID.References,               "References",                true,            true), 
            new HeaderInfo(MailHeaderID.ReplyTo,                  "Reply-To",                  true,            false),
            new HeaderInfo(MailHeaderID.ResentBcc,                "Resent-Bcc",                false,           true), 
            new HeaderInfo(MailHeaderID.ResentCc,                 "Resent-Cc",                 false,           true),
            new HeaderInfo(MailHeaderID.ResentDate,               "Resent-Date",               false,           true),
            new HeaderInfo(MailHeaderID.ResentFrom,               "Resent-From",               false,           true),
            new HeaderInfo(MailHeaderID.ResentMessageID,          "Resent-Message-ID",         false,           true), 
            new HeaderInfo(MailHeaderID.ResentSender,             "Resent-Sender",             false,           true),
            new HeaderInfo(MailHeaderID.ResentTo,                 "Resent-To",                 false,           true), 
            new HeaderInfo(MailHeaderID.Sender,                   "Sender",                    true,            false), 
            new HeaderInfo(MailHeaderID.Subject,                  "Subject",                   true,            false),
            new HeaderInfo(MailHeaderID.To,                       "To",                        true,            false), 
            new HeaderInfo(MailHeaderID.XPriority,                "X-Priority",                true,            false),
            new HeaderInfo(MailHeaderID.XReceiver,                "X-Receiver",                false,           true),
            new HeaderInfo(MailHeaderID.XSender,                  "X-Sender",                  true,            true)
        }; 
        private static readonly Dictionary m_HeaderDictionary; 
 
        static MailHeaderInfo() {
 
#if DEBUG
            // Check that enum and header info array are in [....]
            for(int i = 0; i < m_HeaderInfo.Length; i++) {
                if((int)m_HeaderInfo[i].ID != i) { 
                    throw new Exception("Header info data structures are not in [....]");
                } 
            } 
#endif
 
            // Create dictionary for string-to-enum lookup.  Ordinal and IgnoreCase are intentional.
            m_HeaderDictionary = new Dictionary((int)MailHeaderID.ZMaxEnumValue + 1, StringComparer.OrdinalIgnoreCase);
            for(int i = 0; i < m_HeaderInfo.Length; i++) {
                m_HeaderDictionary.Add(m_HeaderInfo[i].NormalizedName, i); 
            }
        } 
 
        internal static string GetString(MailHeaderID id) {
            switch(id) { 
                case MailHeaderID.Unknown:
                case MailHeaderID.ZMaxEnumValue+1:
                    return null;
                default: 
                    return m_HeaderInfo[(int)id].NormalizedName;
            } 
        } 
        internal static MailHeaderID GetID(string name) { 
            int id;
            if(m_HeaderDictionary.TryGetValue(name, out id)) {
                return (MailHeaderID)id;
            } 
            return MailHeaderID.Unknown;
        } 
 
        internal static bool IsWellKnown(string name) {
            int dummy; 
            return m_HeaderDictionary.TryGetValue(name, out dummy);
        }
        internal static bool IsUserSettable(string name) { 
            int index;
            if (m_HeaderDictionary.TryGetValue(name, out index)) { 
                return m_HeaderInfo[index].IsUserSettable; 
            }
            //values not in the list of well-known headers are always user-settable 
            return true;
        }
        internal static bool IsSingleton(string name) { 
            int index;
            if(m_HeaderDictionary.TryGetValue(name, out index)) { 
                return m_HeaderInfo[index].IsSingleton; 
            }
            return false; 
        }
        internal static string NormalizeCase(string name) {
            int index; 
            if(m_HeaderDictionary.TryGetValue(name, out index)) {
                return m_HeaderInfo[index].NormalizedName; 
            } 
            return name;
        } 
        internal static bool IsMatch(string name, MailHeaderID header) {
            int index;
            if(m_HeaderDictionary.TryGetValue(name, out index) && (MailHeaderID)index == header) { 
                return true;
            } 
            return false; 
        }
    } 
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                          
                        
                        
                        
                    Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HTMLTextWriter.cs
- ContainerUtilities.cs
- SqlDependencyListener.cs
- InternalMappingException.cs
- WindowsContainer.cs
- PolyBezierSegment.cs
- DynamicMetaObject.cs
- MultiAsyncResult.cs
- DesignerProperties.cs
- Win32NamedPipes.cs
- PolicyManager.cs
- StrokeNodeOperations.cs
- GroupPartitionExpr.cs
- GacUtil.cs
- ResourcesBuildProvider.cs
- Triangle.cs
- AsyncPostBackErrorEventArgs.cs
- PolyBezierSegment.cs
- LabelEditEvent.cs
- QilSortKey.cs
- PointCollection.cs
- OleDbRowUpdatingEvent.cs
- JulianCalendar.cs
- PasswordPropertyTextAttribute.cs
- DatePicker.cs
- BooleanStorage.cs
- RectKeyFrameCollection.cs
- IisTraceListener.cs
- RemotingServices.cs
- PeerPresenceInfo.cs
- HeaderedContentControl.cs
- XmlSchemaException.cs
- Figure.cs
- SqlDataSourceCommandEventArgs.cs
- TextDpi.cs
- FieldInfo.cs
- ContainerParaClient.cs
- WS2007FederationHttpBindingCollectionElement.cs
- GeneralTransformGroup.cs
- SystemWebSectionGroup.cs
- ConfigurationFileMap.cs
- TabletCollection.cs
- StandardCommands.cs
- RIPEMD160Managed.cs
- cookieexception.cs
- RtType.cs
- messageonlyhwndwrapper.cs
- XmlException.cs
- DependencyPropertyAttribute.cs
- EventMappingSettingsCollection.cs
- DataListAutoFormat.cs
- EngineSiteSapi.cs
- StreamAsIStream.cs
- WindowExtensionMethods.cs
- ProcessThread.cs
- RubberbandSelector.cs
- SourceElementsCollection.cs
- BrowserDefinition.cs
- XPathItem.cs
- GlyphingCache.cs
- MaterializeFromAtom.cs
- ProbeMatchesApril2005.cs
- Activity.cs
- DrawingAttributesDefaultValueFactory.cs
- AsymmetricKeyExchangeFormatter.cs
- SelectionPatternIdentifiers.cs
- HtmlUtf8RawTextWriter.cs
- KeyPressEvent.cs
- Config.cs
- SqlRowUpdatedEvent.cs
- NativeCompoundFileAPIs.cs
- ResXResourceSet.cs
- MultilineStringConverter.cs
- BamlReader.cs
- AssociationSet.cs
- SettingsBindableAttribute.cs
- SafeHandle.cs
- DataGridDetailsPresenter.cs
- HttpCachePolicy.cs
- ThicknessAnimationUsingKeyFrames.cs
- BitmapMetadataEnumerator.cs
- IDReferencePropertyAttribute.cs
- ExtendedPropertyDescriptor.cs
- UnitySerializationHolder.cs
- ConfigurationElementCollection.cs
- Int32KeyFrameCollection.cs
- RegexGroup.cs
- BoolExpr.cs
- DesignerDataSchemaClass.cs
- DeflateStreamAsyncResult.cs
- KeyValueSerializer.cs
- XDRSchema.cs
- ClientType.cs
- NameValueCollection.cs
- NativeMethodsOther.cs
- DataContractSerializer.cs
- WebPartTransformerAttribute.cs
- SendReply.cs
- ColorTransform.cs
- RMPermissions.cs