2011-01-14 9 views
2

Für das benutzerdefinierte CRM meines Kunden möchte ich, dass Benutzer (Techniker) über Änderungen an markierten Fällen per E-Mail benachrichtigt werden.Senden von Massenbenachrichtigungs-E-Mails ohne Blockierung

Dies garantiert eine einfache Abonnement-Mapping-Tabelle zwischen Benutzern und Fällen und automatisierte E-Mails gesendet werden jedes Mal, wenn eine Änderung an einem Fall von innerhalb der Protokollierungsmethode vorgenommen wird.

Wie sende ich 10-100 E-Mails an abonnierte Benutzer, ohne meine Protokollierungsmethode zu verwerfen? Mein SMTP-Server befindet sich auf einem Peer in meinem LAN, daher sollten die Sendevorgänge schnell sein, aber idealerweise sollte dies durch einen externen Warteschlangenprozess erfolgen.

Ich kann einen Cron Job senden alle ausstehenden E-Mails alle 10 Minuten, aber für diesen spezifischen Client Fällen sind sehr zeitkritisch und sofortige Benachrichtigung (so schnell wie E-Mail sein kann) wäre toll.

Wie kann ich Bulk-E-Mail-Benachrichtigungen innerhalb von ASP.NET MVC senden, ohne meine Protokollierungsmethode zu ignorieren?

Antwort

2

Senden von E-Mails von einer ASP.NET-Anwendung ist keine gute Idee, da es wertvolle Serverressourcen monopolisieren kann. Eine bessere Lösung wäre, einen Windows-Dienst für diese Aufgabe einzurichten oder sogar eine Konsolenanwendung zu schreiben, die so geplant werden kann, dass sie mit Windows Scheduler ausgeführt werden kann. Quartz.NET ist eine gute Lösung, mit der Sie Jobs planen können.

Wenn Sie möchten, dass das Senden von E-Mails innerhalb einer bestimmten Controller-Aktion ausgelöst wird, können Sie auch einen separaten WCF-Dienst haben, der asynchron aufgerufen werden kann.

+0

Wie wäre es mit MSMQ? –

+0

@FreshCode, ja MSMQ ist auch sehr gut für diese Art von Aufgaben. –

3

Im Jahr 2007 wurde ich gebeten, einen Fall zu untersuchen, in dem der Web-Server plötzlich einfriert und 503-Fehler sendet und nach ein paar Minuten wiederkommt. Kurz gesagt, es stellte sich am Ende heraus, dass E-Mails gesendet wurden, die den Server blockierten (zusätzlich zu etwas schlechtem Code).

Grundsätzlich ist Microsoft SMTP-Server als ein Thread-Dienst implementiert - zuletzt habe ich überprüft. Dies bedeutet, dass all Ihre wertvollen ASP.NET-Thread-Serving-Anforderungen in eine monolithische Anwendung mit einem einzelnen Thread eingereiht werden müssen, um eine nicht so dringende E-Mail zu senden. Sie müssen Ihre Website vom Senden von E-Mails entkoppeln - das macht jeder, und dafür gibt es einen guten Grund.

Schreiben Sie Ihre E-Mails in eine Warteschlange und lassen Sie einen Prozess E-Mails lesen und senden.