rupeshsha8452 Ответов: 2

отправлять письма асинхронно от c#


Я пытаюсь отправить почтовую почту асинхронно с c#, но там нет ошибки, а также нет отправки электронной почты на данный почтовый идентификатор. Вот что я использую код :-

В этом коде, когда я отправляю простую почту, она работает нормально.

public void SendMailAccro(int SlNo, string EmailId, string Body)
      {

          MailMessage mail = new MailMessage();
          mail.From = new MailAddress("_____________", "___________", System.Text.Encoding.UTF8);
          mail.To.Add(EmailId);
          mail.Subject = "VOTING DETAILS";
          mail.Body = Body;
          mail.Priority = MailPriority.Normal;
          mail.ReplyTo = new MailAddress("___________", "___________", System.Text.Encoding.UTF8);

          slno = SlNo;
          mail.IsBodyHtml = true;
          SmtpClient smtp = new SmtpClient();

          smtp.Host = "__________________";
          //smtp.EnableSsl = true;
          System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
          NetworkCred.UserName = "_______";
          NetworkCred.Password = "_______";
          //smtp.UseDefaultCredentials = true;
          smtp.Credentials = NetworkCred;
          smtp.Port = "___"
          Object state = mail;

          smtp.SendCompleted += new SendCompletedEventHandler(smtpClient_SendCompleted);
          try
          {
              smtp.SendAsync(mail, "Name");
          }
          catch (SmtpException ex)
          {
              Console.WriteLine(ex.Message);
          }
          finally
          {
              mail.Dispose();
          }
      }
      void smtpClient_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
      {
          MailMessage mail = e.UserState as MailMessage;
          if (!e.Cancelled && e.Error != null)
          {

              //message.Text = "Mail sent successfully";
          }
      }

Pascal-78

Пытались ли вы избавиться от почтового объекта только в событии SendCompleted ? (или не утилизировал его)
вы можете выйти из функции SendAsync и избавиться от почтового объекта до того, как он будет использоваться smtp-объектом.

2 Ответов

Рейтинг:
2

rupeshsha8452

Этот код не дает ошибки. Но электронная почта не получена, учитывая идентификатор электронной почты.


Рейтинг:
1

Mendor81

Я разработал отправитель электронной почты для своей компании, который может отправлять как асинхронный, так и, как я уже сказал, метод fire and forget. Мы отправляем его через сервер exchange. проверяя строки вашего кода, единственное различие, которое я могу найти, заключается в том, что я определяю:

Properties.Settings settings = new DBPROG.Properties.Settings(); 
//to get our server settings


SmtpClient client = new SmtpClient(settings.smtp_server,settings.smtp_port);
client.DeliveryMethod = SmtpDeliveryMethod.Network; 

.....


if (securesent)
{
    client.SendCompleted += new SendCompletedEventHandler(MailDeliveryComplete);
    client.SendAsync(mail, mail.To[0].ToString());
}
else
{
    client.Send(mail);
    CreateLogFiles SendLog = new CreateLogFiles();
    SendLog.ErrorLog("C:\\","\t|Mail sended (Subject): "+mail.Subject.ToString()
                                    + " \t|TO: " + mail.To.ToString()
                                    + " \t|FROM: " + mail.From.ToString()
                                    + " \t|REPLYTO: " + mail.ReplyToList[0].ToString()                                   
                                    , "UNSECURE_SENDLOG", true);
}