2017-03-21 7 views
0

Ich versuche, E-Mail mit C# -Code zu senden, E-Mail wurde gesendet, wenn ich es an einzelne Person sende, aber es wird nicht gesendet, wenn ich es an mehrere Personen sende. und einen Fehler erhalten "Die Operation hat abgelaufen." Ich verstehe nicht den Grund dafür. Bitte helfen Sie den Grund zu finden.So beheben Sie "Der Vorgang ist abgelaufen."?

Code:

public string SendEmail(List<string> ToEmailAddresses,string body, string emailSubject) 
    { 
     var smtp = new SmtpClient { DeliveryMethod = SmtpDeliveryMethod.Network }; 

     smtp.Host = "xyz-host-name"; 

     smtp.Port = 25; 

     smtp.EnableSsl = false; 

     var fromAddress = new MailAddress(ConfigurationManager.AppSettings["MailUserName"], "Rewards and Recognition Team"); 

     using (var message = new MailMessage() { Subject = emailSubject, Body = body }) 
     { 
      message.From = fromAddress; 

      foreach (string email in ToEmailAddresses) 
      { 
       message.To.Add(email); 
      } 
      message.IsBodyHtml = true; 
      try 
      { 
       _logger.Log("EmailService-SendEmail-try"); 
       smtp.Send(message); 
       return "Success"; 
      } 
      catch (Exception ex) 
      { 
       _logger.Log("EmailService-SendEmail-" + ex.Message); 
       return "Error"; 
      } 
     } 
    } 
+1

teilen Sie Ihren vollständigen Code –

+0

Post Ihren vollständigen Code dann können wir nur in der Lage, den Fehler zu finden. – PRABA

+0

Beachten Sie, dass das Senden von E-Mails an mehrere Empfänger nicht einfach ist. Viele E-Mails können als möglicher Spam abgelehnt werden. – i486

Antwort

1

Jedes Mal, wenn Sie versuchen, etwas zu tun, was einige Zeit dauern kann, ist es immer am beste Praxis in einem separaten Thread ausführen oder eine asynchrone Methode verwenden.

Meine Empfehlung wäre, die SmtpClient.SendAsync Methode zu verwenden. Um dies zu tun, ändern:

public string SendEmail(List<string> ToEmailAddresses, string body, string emailSubject) 

zu:

public async string SendEmail(List<string> ToEmailAddresses, string body, string emailSubject) 

und umfassen await smtp.SendAsync(...) statt smtp.Send(...). Dies ermöglicht die weitere Ausführung des UI-Threads beim Senden der E-Mail und nicht das Ausblenden der Anwendung mit der Meldung "antwortet nicht".

Um mehr über smtp.SendAsync(...) einschließlich Parameter und Bemerkungen zu erfahren, werfen Sie einen Blick auf die MSDN documentation in Bezug auf die Methode.

Verwandte Themen