2009-03-09 6 views
0

Wir hatten ein Problem mit einer Massenmailer-Komponente, die ich für eine lange Zeit geschrieben habe und die genaue Art der Schwierigkeit, wie man es misst und wie man es mindert blieb schwer fassbar.SMTP durch ASP.Net 2 Session Size Problem

Es ist an dem Punkt, wo diese Probleme kritisch werden und ich brauche einige klare Antworten, so hoffe ich, dass jemand hier sie zur Verfügung stellen kann.

Grundsätzlich sendet dieses Massenmailer Widget nur ca. 25.000 E-Mails eine E-Mail zu einer Mail-Liste. Dies ist unsere vielbevorzugte Nachricht, weil es bedeutet, dass jeder Empfänger eine an ihn adressierte Mail erhält, also sind wir mit dieser Schleife zufrieden.

Was uns nicht erfreut ist, dass, wenn Sie das Programm nur nach ca. 6k E-Mails verarbeiten, erhalten wir einen Fehler, dass die "Maximale Session-Größe" erreicht wurde und es keine weiteren Mails senden wird.

Wir wissen derzeit nicht genau, welche E-Mail es war, unsere einzige Methode der Drosselung basiert auf Ratenarbeit und umfasst das Senden von 1k E-Mails alle 90 Sekunden per manueller Tastenbetätigung.

Ich habe gesucht, bis mein Kopf ist wund für einige Hinweise, wie die E-Mails zu verfolgen, wie sie ausgehen, wie die Sitzungsgröße oder etwas zu messen, nur um den Prozess zu ermöglichen, ein Tastendruck und für das Widget zu sein Selbstdrosseln, aber niemand scheint online darüber reden zu wollen.

Ich hatte ein paar Vorschläge zu verwandten Fragen, die vorschlagen, das Widget komplett zu überarbeiten oder sogar eine massgeschneiderte Massenmail-App zu schreiben.

Am Ende wollen wir nur die ausgehende Mail drosseln, so dass es keinen Fehler verursacht, oder, wenn dies unvermeidlich ist, erlauben Sie es, die gesendeten Mails zu zählen und uns einen Hinweis zu geben, wo Sie abholen Behandeln Sie den Fehler sogar elegant. Etwas. Etwas.

Hat jemand irgendwelche bodenständigen und praktischen Vorschläge für die Verfolgung von .Net 2.0 generierten E-Mails aus dem Ursprungsserver?

Antwort

1

Warum wächst die Sitzung? Machst du das innerhalb der Lebensdauer einer Anfrage?

Ich gehe davon aus, dass Sie "verfolgen", indem Sie Informationen über E-Mails, die innerhalb des Sitzungsstatus gesendet werden, speichern. Ich würde einen Tracker schreiben, der Tracking-Informationen in den externen Speicher schreiben kann, zum Beispiel XML-Dateien auf dem Datenträger oder eine SQL-Datenbank.

Wenn der Tracking-Teil keine Probleme verursacht, aber die E-Mail (oder das Widget, das sie sendet) ist, können Sie versuchen, E-Mails und BCC-E-Mails zu verschicken, anstatt sie an einen zu senden Zeit. Blind Carbon Copies werden immer persönlich adressiert und enthüllen dem Empfänger nicht, dass es Massenmails waren. Sie müssen nur das Limit für die Anzahl der E-Mails herausfinden, die Sie über BCC senden können. Die dritte Option besteht darin, in Ihrer Webanwendung das, was Sie zum Generieren dieser E-Mails benötigen, an einem gemeinsamen Speicherort abzulegen und eine Windows Service-App (oder eine geplante Aufgaben-App) zu verwenden, die regelmäßig nach neuen E-Mail-Jobs sucht und diese verarbeitet außerhalb Ihrer Web-App ... vielleicht sogar außerhalb des Host-Servers Ihrer Web-App. Natürlich würde diese Art von Sache nicht auf Shared-Hosting-Servern funktionieren ...

+0

Soweit die Sitzung läuft, ich nur berichten, was die zurückgegebene Fehlermeldung sagt. Obwohl du mir einen interessanten Gedanken gegeben hast. Die dritte Option klingt wie ein Besucher. –

+0

Wahrscheinlich ist eine einfache Anwendung, die als eine geplante Aufgabe ausgeführt wird, Ihre beste Wette. – Will

0

Wir tun viel die gleiche Sache, aber wir tun 500 E-Mails gleichzeitig pro Minute. Die ersten 500 werden gesendet, dann lädt sich die Seite neu, und der Job wird mit den nächsten 500 fortgesetzt.

Dies erfordert ein wenig Protokollierung und Speicherung von Informationen über die aktuelle Warteschlange von 500, so dass Timeouts, frühes Neuladen, etc., aber es funktioniert (E-Mailing wahrscheinlich 10.000 oder so E-Mails in einer bestimmten Nacht) für ein Paar von Jahren.