Senden von mehr als 20.000 E-Mails mit asp.net

7

Ich schreibe eine Anwendung, die eine große Anzahl von E-Mails an unsere Studenten senden muss, die aus unserer Datenbank ausgewählt werden (jede E-Mail wird personalisiert sein, die ihren Namen, ihren Studiengang usw. enthält) also muss eins nach dem anderen gesendet werden).

Ich könnte diese Schleife über einen SmtpClient machen, aber ich befürchte, dass ich mit den Zahlen, die ich senden möchte, letztendlich Probleme mit Timeouts bekommen werde oder dass mein Thread wegen fehlender Maschinenressourcen beendet wird.

An dieser Stelle suche ich nur nach Vorschlägen für einen besseren Weg, dies zu tun, oder wenn das Umgehen von SmtpClient eine gute Lösung ist, wie sollte ich damit umgehen, um das zu verhindern, was ich oben gepostet habe.

Wäre ein Web-Service eine bessere Alternative?

Bitte beraten, TIA

    
Kyle 12.04.2010, 17:05
quelle

5 Antworten

11

Mein Vorschlag wäre, dies auszugleichen. Versuchen Sie nicht, ASP.NET-Code auszuführen, um 20K-E-Mails zu erstellen, und senden Sie sie, da Sie Probleme mit Timeout und Leistung haben. Füllen Sie stattdessen eine Tabelle mit Empfänger, Betreff und Nachrichtentext aus, und starten Sie einen Stapelprozess von einem Windows-Dienst. Auf diese Weise wird Ihr Code so ausgeführt, dass die Verzögerung verwaltet werden kann, anstatt dass eine Webseite auf die Rückgabe der Anfrage wartet.

    
John Hartsock 12.04.2010, 17:12
quelle
6

Ok, zuerst - das ist nicht schwer, ich habe 50.000 Emails bearbeitet

Lassen Sie die E-Mails in ein FOLDER-Verzeichnis schreiben. Verwenden Sie dann den lokalen SMTP-Dienst, den Sie installieren können, und weisen Sie ihn als Pickup-Verzeichnis auf den Ordner hin. Dies wird zumindest sicherstellen, dass Sie einen anständigen Puffer dazwischen haben (d. H. Sie können die asp.net-Seite beenden, während die E-Mails zu diesem Zeitpunkt nicht gesendet werden).

    
TomTom 12.04.2010 17:11
quelle
2

Was ist mit dem Database Mail Tool, das von SQL Server selbst bereitgestellt wird? Sie können immer noch asp.net verwenden, aber E-Mail wird von SQL Server gesendet und alles, was Sie tun müssen, rufen Sie die gespeicherte Prozedur und lassen Sie Dinge an SQL Server.

Ich würde die Batch-Option nicht empfehlen, da es keine Optimierung oder Warteschlangen-Sache geben wird, es sei denn, Sie müssen sich sehr anstrengen.

Das Datenbank-Mail-Tool bietet auch Warteschlangen- und Prioritätsoptionen. Wenn ein Problem auftritt, wird die E-Mail erneut in die Warteschlange gestellt und später gesendet, aber die anderen werden noch gesendet.

In früheren Versionen heißt es Database Mail in SQL Server 2008 und SQL Mail .

Weitere Informationen finden Sie in den folgenden Links:

Tarik 12.04.2010 22:17
quelle
0

Sie könnten Javascript bei einem Timer verwenden, um das Skript anzufordern, das E-Mails in kleinen Teilen versendet, die keine Zeit verlieren. Dann würden Sie das Skript über den Browser aufrufen. Fügen Sie einen Fortschrittsbalken, eine Authentifizierung usw. hinzu.

    
Fletcher Moore 12.04.2010 17:11
quelle
0

Sie benötigen keinen Webservice, sondern eine Möglichkeit, die E-Mails in eine Warteschlange zu schreiben (vielleicht eine "Email_Queue" -Tabelle in der Datenbank). Dann könnte ein Windows-Dienst, der auf einem Server ausgeführt wird, die Warteschlange nach dem Prinzip "first-in / first-out" zu angemessenen Zeitpunkten an den SMTPClient durchlesen und Elemente aus der Warteschlange entfernen, während sie verarbeitet werden. Sie müssten wahrscheinlich einige Messungen durchführen, um festzustellen, wie groß die Chunk-Größe und die Verzögerung für Ihren Mail-Server sind.

    
Turnkey 12.04.2010 17:17
quelle