Print
Setkal jsem se v aplikaci s požadavkem na přímé odesílání mailu. K tomuto účelu se hodí třída SmtpClient, která obsahuje parametrickou metodu .Send(). Bohužel, ve Windows 7 a Windows Vista metoda selhává /nepřítomnost prostředků IIS/. Rozhodl jsem se použít k odeslání asynchronní variantu metodu .SendAsync(). Na rozdíl od metody .Send() však tato vyžaduje událost pro obsluhu stavu.

Pro funkčnost je také podstatné, stanovit správně schránku pro odesílání emailu v systému /DeliveryMethod/. Uvádím možné řešení:

public bool SendMailA(string p_from, string p_to, string p_sub, string p_body, string p_attach)
{
//iniciuje třídu SmtpClient s parametry: adresa SMTP serveru,
//port serveru
SmtpClient client = new SmtpClient(cSMTPserver, nPortNum)
//autentizace klienta, pokud jej bude provider vyzadovat client.Credentials =
new NetworkCredential(this.cUserAddr, this.cUserPass);
client.EnableSsl = this.bIsSSL; client.Timeout = 5000;

try
{
  //iniciuje mailovou zpravu
  MailMessage message = new MailMessage(from, to);
  message.Sender = p_from;
  message.To = p_to;
  message.IsBodyHtml = this.bIsHTML;
  message.Body = p_body;
  message.BodyEncoding = System.Text.Encoding.UTF8;
  message.Subject = p_sub;
  message.SubjectEncoding = System.Text.Encoding.UTF8;


  //token
  object mailState = message;
  //událost pro obsluhu stavu zpracování metody
  client.SendCompleted +=
    new SendCompletedEventHandler(SmtpClient_OnCompleted);
  client.SendAsync(message, mailState); //odeslani zpravy
  return (this.bSendRes);
}
catch (Exception ex)
{
   MessageBox.Show(ViewException(ex),"Chyba");
   return (false);
}


//událost pro obsluhu stavu zpracování metody SendAsync
public void SmtpClient_OnCompleted(object sender, AsyncCompletedEventArgs e)
{
  string m_result = "";
  MailMessage mail = (MailMessage)e.UserState;

  try
  {
  if (e.Cancelled)
    {
    m_result = "Odesílání mailu příjemci " + mail.To.ToString() + " zrušeno!";
   }
  if (e.Error != null)
   {
     m_result = "Chyba v průběhu odesílání mailu " + mail.To.ToString() + "\r\n" + e.Error.ToString();
   }
  else
    {
    m_result = "Zpráva příjemci " + mail.To.ToString() + " odeslána...";
    this.bSendRes = true;
   }
  }
  catch (Exception ex)
   {
     m_result = ex.Message + ex.InnerException.ToString();
   }
} //SmtpClient_OnCompleted