Re[8]: SmtpMail - как его побороть?
От: Shulapov Max Россия  
Дата: 25.01.05 13:35
Оценка:
Здравствуйте, ChabaninDmitry, Вы писали:

CD>Здравствуйте, Shulapov Max, Вы писали:



SM>>я тоже когда-то боролся с SMTP, потом даже написал враппер под MAPI, вполне неплохо работало, а потом я узнал как использовать Web.Mail через Exchange и с тех пор пользуюсь только им. Для моих скромных задач вполне хватает.


CD>Дык раскажи народу КАК.


пожалуйста, вот кусок кода...


IDictionary Send(IDictionary parameters)
    {
        IDictionary result = new Hashtable();
        try
        {
            //TODO: attach, utf8, headers
            MailMessage mm = new MailMessage();

            //настройка свойств
            if (parameters.Contains("BCC"))
                mm.Bcc = (string)parameters["BCC"];
            if (parameters.Contains("Body"))
                mm.Body = (string)parameters["Body"];
            if (parameters.Contains("Encoding"))
                mm.BodyEncoding = (System.Text.Encoding)Enum.Parse(typeof(System.Text.Encoding), (string)parameters["Encoding"], true);
            if (parameters.Contains("Format"))
                mm.BodyFormat = (MailFormat)Enum.Parse(typeof(MailFormat), (string)parameters["Format"], true);
            if (parameters.Contains("CC"))
                mm.Cc = (string)parameters["CC"];
            if (parameters.Contains("FROM"))
                mm.From = (string)parameters["FROM"];
            if (parameters.Contains("Priority"))
                mm.Priority = (MailPriority)Enum.Parse(typeof(MailPriority), (string)parameters["Priority"], true);
            if (parameters.Contains("Subject"))
                mm.Subject = (string)parameters["Subject"];
            if (parameters.Contains("TO"))
                mm.To = (string)parameters["TO"];
            if (parameters.Contains("UrlContentBase"))
                mm.UrlContentBase = (string)parameters["UrlContentBase"];
            if (parameters.Contains("UrlContentLocation"))
                mm.UrlContentLocation = (string)parameters["UrlContentLocation"];

            //add fields
            IDictionaryEnumerator enumer = parameters.GetEnumerator();
            while (enumer.MoveNext())
            {
                if (enumer.Key.ToString().StartsWith("Field:"))
                {
                    string _field = enumer.Key.ToString().Substring(5);
                    mm.Fields.Add(_field, enumer.Value);
                }
            }

            //настройка smtp 
            if (m_useExchange)
            {
                SmtpMail.SmtpServer = m_exchange;
                mm.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", m_exchange); 
                mm.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 2); //NTLM
            }
            else
            {
                SmtpMail.SmtpServer = m_server;
                mm.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", m_server); 
                mm.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 0); //None
            }

            mm.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", m_port); 
            mm.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2); 
            //cdoSendUsingPort: Send the message using the network (SMTP over the network).  
            //If you specify the value cdoSendUsingPort, you need to set the values for the following fields:
            //http://schemas.microsoft.com/cdo/configuration/smtpserverport Field
            //http://schemas.microsoft.com/cdo/configuration/smtpserver Field

            
            SmtpMail.Send(mm);
        }
        catch(Exception ex)
        {
            ErrorTracer.Trace(ex.Message);
            if (ex.InnerException != null)
            {
                ErrorTracer.Trace(ex.InnerException.Message);
                if (ex.InnerException.InnerException != null)
                {
                    ErrorTracer.Trace(ex.InnerException.InnerException.Message);
                    if (ex.InnerException.InnerException.InnerException != null)
                        ErrorTracer.Trace(ex.InnerException.InnerException.InnerException.Message);
                }
            }
    
            result.Add("Successed", false);
            return result;
        }

        result.Add("Successed", true);
        return result;
    }



фишка в "mm.Fields.Add"
в общем MSDN вам в руки...
Одинаковые ошибки не обязательно делать каждый раз, достаточно сделать одну, а затем обращаться к ней по мере необходимости из любого места программы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.