C# Senden SMTP mit System.Threading

Habe ich eine Anwendung entwickelt, die vor allem sendet E-Mail-Nachrichten verwendet SMTP. Senden von Nachrichten eine nach eine ist in Ordnung, jedoch bin ich auf der Suche um den Prozess zu beschleunigen. Erstellt habe ich mehrere Instanzen des SmtpClient sowie Nachrichten zu vermeiden, Konflikte untereinander. Weil der separate Instanzen, bin ich davon ausgegangen, Durchführung .Send() auf mehrere threads, die gut funktionieren würde. Jedoch, etwas mit meinem Thread code allein funktioniert nicht, da ich nicht senden kann, sogar eine E-Mail in einem thread mit diesem code. Ich erhalten lediglich eine vage "Failure sending mail" Ausnahme. Ich poste code, der funktioniert, und die Thread das funktioniert nicht. Könnte mir jemand mitteilen, was Sie glauben, kann die Ursache sein?

Hinweis ich bin momentan nicht auf der Suche zu verwenden, die neueren async Fähigkeiten sondern nutzt Thread

Arbeiten Deklaration und Aufruf der Methode:

var SMTP = new SmtpClient
    {
        Host = txtBxSenderHost.Text,
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(strSenderAddress, strSenderPassword)
    };

using (var message = new MailMessage(senderAdrress, toAddress)
    {
        Subject = strSubject,
        Body = strBody
    })

    {
        SMTP.Send(message);
    }

Funktioniert NICHT Thread-Deklaration und den Aufruf der Methode:

var SMTP = new SmtpClient
    {
        Host = txtBxSenderHost.Text,
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(strSenderAddress, strSenderPassword)
    };

using (var message = new MailMessage(senderAdrress, toAddress)
    {
        Subject = strSubject,
        Body = strBody
    })

    {
        Thread T1 = new Thread(delegate() { SMTP.Send(message); } );
        T1.Start();
    }
  • Sie haben new Thread innerhalb einer using block für message? Auf diese Weise, wird die Nachricht wahrscheinlich entsorgt werden, bevor der neue thread sendet es.
  • Wickeln Sie Ihre Arbeit-Erklärung und die Arbeitsweise in einer anderen Methode, und verwenden Sie dann die Methode in thread
  • Ich nicht. Können Sie etwas näher bitte? Ich bin bin auch nicht sicher, was du damit meinst entsorgt werden, bevor der neue thread sendet, zum testen Willen, ich bin nur über den thread. Ich könnte auch Weg sein hier, ich hoffe, du kannst mit mir nackt.
  • Ist dein thread T1 und Delegat deklariert, die innerhalb des using-Blocks? und T1.start() ist, dass auch im using-block. Ihr code ist ein wenig vage über die Struktur, die Sie mithilfe der Anweisung
  • (...und die Task Parallel Library macht diese Art von threading-so viel einfacher und effizienter, als die Verwaltung Ihre eigenen threads)
  • Ich bearbeitet meine post zu helfen, mit Verwirrung (sorry Jungs). Ist diese "Task Parallel" eine praktische Lösung für multi-threading-smtp?
  • Können Sie zeigen die volle Ausnahme und jeder inneren Ausnahmen? msdn.microsoft.com/en-us/library/...
  • Die SMTPException Sie zurück bekommen haben, sollten einen StatusCode Eigenschaft, die Ihnen sagen, was das eigentliche problem ist. Ich habe den Verdacht, dass eine einzelne SMTPClient kann nicht senden mehr als eine E-Mail an, sobald, obwohl, so müssen Sie möglicherweise erstellen Sie eine neue SMTPClient für jeden thread zu.
  • ja, in der Tat, die ich geschaffen habe mehrere SMTPClients für jeden thread - das problem war allerdings, mein die Kodierung deklarieren und aufrufen der thread selbst, bevor ich könnte sogar mehrere lieben. Danke für den input - ich Liebe diese Seite! großartige community!

InformationsquelleAutor scniro | 2013-01-25
Schreibe einen Kommentar