Здравствуйте, 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 вам в руки...
Одинаковые ошибки не обязательно делать каждый раз, достаточно сделать одну, а затем обращаться к ней по мере необходимости из любого места программы.