File: net\System\Net\mail\SmtpException.cs
Project: ndp\fx\src\System.csproj (System)
//-----------------------------------------------------------------------------
// <copyright file="SmtpException.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//-----------------------------------------------------------------------------
 
namespace System.Net.Mail
{
    using System;
    using System.Diagnostics.CodeAnalysis;
    using System.Runtime.Serialization;
    using System.Security.Permissions;
 
    [Serializable]
    public class SmtpException : Exception, ISerializable
    {
        SmtpStatusCode statusCode = SmtpStatusCode.GeneralFailure;
        
        static string GetMessageForStatus(SmtpStatusCode statusCode, string serverResponse)
        {
            return GetMessageForStatus(statusCode)+" "+SR.GetString(SR.MailServerResponse,serverResponse);
        }
        
        static string GetMessageForStatus(SmtpStatusCode statusCode)
        {
            switch (statusCode)
            {
                default :
                case SmtpStatusCode.CommandUnrecognized:
                    return SR.GetString(SR.SmtpCommandUnrecognized);
                case SmtpStatusCode.SyntaxError:
                    return SR.GetString(SR.SmtpSyntaxError);
                case SmtpStatusCode.CommandNotImplemented:
                    return SR.GetString(SR.SmtpCommandNotImplemented);
                case SmtpStatusCode.BadCommandSequence:
                    return SR.GetString(SR.SmtpBadCommandSequence);
                case SmtpStatusCode.CommandParameterNotImplemented:
                    return SR.GetString(SR.SmtpCommandParameterNotImplemented);
                case SmtpStatusCode.SystemStatus:
                    return SR.GetString(SR.SmtpSystemStatus);
                case SmtpStatusCode.HelpMessage:
                    return SR.GetString(SR.SmtpHelpMessage);
                case SmtpStatusCode.ServiceReady:
                    return SR.GetString(SR.SmtpServiceReady);
                case SmtpStatusCode.ServiceClosingTransmissionChannel:
                    return SR.GetString(SR.SmtpServiceClosingTransmissionChannel);
                case SmtpStatusCode.ServiceNotAvailable:
                    return SR.GetString(SR.SmtpServiceNotAvailable);
                case SmtpStatusCode.Ok:
                    return SR.GetString(SR.SmtpOK);
                case SmtpStatusCode.UserNotLocalWillForward:
                    return SR.GetString(SR.SmtpUserNotLocalWillForward);
                case SmtpStatusCode.MailboxBusy:
                    return SR.GetString(SR.SmtpMailboxBusy);
                case SmtpStatusCode.MailboxUnavailable:
                    return SR.GetString(SR.SmtpMailboxUnavailable);
                case SmtpStatusCode.LocalErrorInProcessing:
                    return SR.GetString(SR.SmtpLocalErrorInProcessing);
                case SmtpStatusCode.UserNotLocalTryAlternatePath:
                    return SR.GetString(SR.SmtpUserNotLocalTryAlternatePath);
                case SmtpStatusCode.InsufficientStorage:
                    return SR.GetString(SR.SmtpInsufficientStorage);
                case SmtpStatusCode.ExceededStorageAllocation:
                    return SR.GetString(SR.SmtpExceededStorageAllocation);
                case SmtpStatusCode.MailboxNameNotAllowed:
                    return SR.GetString(SR.SmtpMailboxNameNotAllowed);
                case SmtpStatusCode.StartMailInput:
                    return SR.GetString(SR.SmtpStartMailInput);
                case SmtpStatusCode.TransactionFailed:
                    return SR.GetString(SR.SmtpTransactionFailed);
                case SmtpStatusCode.ClientNotPermitted:
                    return SR.GetString(SR.SmtpClientNotPermitted);
                case SmtpStatusCode.MustIssueStartTlsFirst:
                    return SR.GetString(SR.SmtpMustIssueStartTlsFirst);
 
            }
        }
 
        public SmtpException(SmtpStatusCode statusCode) : base(GetMessageForStatus(statusCode))
        {
            this.statusCode = statusCode;
        }
 
        public SmtpException(SmtpStatusCode statusCode, string message) : base(message)
        {
            this.statusCode = statusCode;
        }
 
        public SmtpException() : this(SmtpStatusCode.GeneralFailure)
        {
        }
 
        public SmtpException(string message) : base(message)
        {
        }
        
        public SmtpException(string message, Exception innerException) : base(message, innerException) 
        {
        }
 
        protected SmtpException(SerializationInfo serializationInfo, StreamingContext streamingContext) : base (serializationInfo, streamingContext) 
        {
            statusCode = (SmtpStatusCode)serializationInfo.GetInt32("Status");
        }
 
 
        internal SmtpException(SmtpStatusCode statusCode, string serverMessage, bool serverResponse) : base(GetMessageForStatus(statusCode,serverMessage))
        {
            this.statusCode = statusCode;
        }
 
        internal SmtpException(string message, string serverResponse) : base(message+" "+SR.GetString(SR.MailServerResponse,serverResponse))
        {
        }
 
 
        /// <internalonly/>
 
        [SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase", Justification = "System.dll is still using pre-v4 security model and needs this demand")]
        [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
        void ISerializable.GetObjectData(SerializationInfo serializationInfo, StreamingContext streamingContext) {
            GetObjectData(serializationInfo, streamingContext);
        }
 
        [SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase", Justification = "System.dll is still using pre-v4 security model and needs this demand")]
        [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)] 		
        public override void GetObjectData(SerializationInfo serializationInfo, StreamingContext streamingContext){
            base.GetObjectData(serializationInfo, streamingContext);
            serializationInfo.AddValue("Status", (int)statusCode, typeof(int));
        }
 
        public SmtpStatusCode StatusCode
        {
            get {
                return this.statusCode;
            }
            set {
                statusCode = value;
            }
        }
    }
 
}