2 Stimmen

Was ist der beste Weg, um E-Mail-Verteilung über viele Anwendungen zu handhaben?

Ich habe viele Anwendungen in einer Unternehmensumgebung und sie alle verwenden unterschiedliche Methoden zum Senden von E-Mails. Einige senden direkt über einen Exchange-Server, einige stellen sich lokal in einer SMTP-Warteschlange an und andere rufen einen Webdienst auf, der dann die E-Mail sendet.

Ich versuche herauszufinden, wie ich die garantierte Zustellung von E-Mails am besten gewährleisten kann. Wenn unser Exchange-Server ausfällt, können die Anwendungen, die direkt an ihn senden, keine E-Mails mehr senden, und auch E-Mails, die während der Ausfallzeit gesendet wurden, kommen nirgendwo an. Ich würde auch gerne eine universelle Vorlagenlösung implementieren, die alle Anwendungen gemeinsam nutzen können.

Gibt es bereits vorgefertigte Lösungen für dieses Problem oder haben Sie einen Einblick, wie man mit diesem Problem umgehen kann?

2voto

David Punkte 70550

Wir haben dies gelöst, indem wir einen Webdienst erstellt haben, der alle unsere E-Mails sendet. Dieser Webdienst verwendet die

System.Net.Mail.SmtpDeliveryMethod.PickupDirectoryFromIis 

Einstellung, die im Wesentlichen die Dateien an einem Ort auf der Festplatte speichert, versucht, sie über den Haupt-SMTP-Server zu senden, und wenn der Server nicht verfügbar ist, bleiben sie im Verzeichnis, bis er verfügbar WIRD.

Garantierte Auslieferung, solange der Webdienst aktiv ist. Da wir Redundanzprüfungen durchgeführt haben, ist dies fast nie ein Problem. Wenn es doch passiert, behandeln wir es als einen Fehler im Code und gehen damit um.

bearbeiten - hinzugefügt

Ich habe vergessen zu erwähnen, dass XSS auch in E-Mails ein Problem darstellt. Stellen Sie also sicher, dass Sie etwas wie die Microsoft.Security.AntiXss-Bibliothek verwenden, die Funktionen wie GetSafeHtmlFragment enthält, um potenziell gefährliche Skripte zu entfernen, bevor HTML in einer E-Mail ausgegeben wird.

http://msdn.microsoft.com/en-us/security/aa973814.aspx

http://msdn.microsoft.com/en-us/library/aa973813.aspx

2voto

Petteri H Punkte 11211

Ich habe gutes Feedback über Postmark gehört. Vielleicht könnte ein solcher Service die Lösung sein, da er mehrere Integrationspunkte hat.

http://postmarkapp.com

0voto

DipakRiswadkar Punkte 292

Wir haben HMailServer (auf der Windows-Plattform) verwendet, der Freeware ist. Wir haben die maximale Anzahl von Wiederholungsversuchen auf "sehr viele" konfiguriert und einen externen SMTP-Server verwendet, um die E-Mails weiterzuleiten. Unsere Anwendungen stellen E-Mails in der Warteschlange des HMailServers bereit, der sie dann weiterleitet. Mit der konfigurierten maximalen Anzahl von Wiederholungsversuchen können wir sicherstellen, dass die E-Mails zugestellt werden - jedoch gibt es keine Garantie, wenn die Haupt-SMTP-Relay-Server lange ausgefallen sind.

0voto

DavidJBerman Punkte 955

Ich mache das, indem ich E-Mails in eine SQL-Serverdatenbank einreihen. Jede ACID-konforme Datenbank wird funktionieren oder Sie können MongoDB mit 'sicherem Modus' verwenden, aber wenn Sie wirklich eine Garantie benötigen, verwenden Sie SQL Server oder MySQL. Auf diese Weise geht Ihre E-Mail nicht verloren, sobald sie in der Datenbank gespeichert ist, und Ihre App muss sich keine Gedanken darüber machen. Sie könnten einen Webdienst verwenden oder einfach eine gemeinsam genutzte Assembly mit einer statischen öffentlichen Methode in einer Klasse erstellen, um Ihre E-Mail in die Datenbank zu legen.

Enthalten Sie eine Spalte für den Status wie 'neu', 'zugestellt', 'Empfängerpostfach vorübergehend voll', die Sie mit numerischen Werten darstellen können, und behalten Sie eine Spalte TimeToSend bei, die mit der Zeit beginnt, zu der die E-Mail in der Datenbank eingereiht wird.

Dann haben Sie eine E-Mail-App, die Sie einmal pro Minute als geplanten Windows-Task ausführen können. Machen Sie es als Konsolen-App. Wenn es geladen wird, prüft es, ob bereits eine Instanz davon läuft, und wenn dies der Fall ist, wird es beendet. Wenn es ausgeführt wird: 1. Versucht, jede E-Mail an den Mailserver zuzustellen. Abfrage der Datenbank nach allen E-Mails, bei denen die TimeToSend älter ist als die aktuelle Zeit.
2. Wenn die E-Mail an den Mailserver zugestellt wird, markieren Sie sie als logisch gelöscht. 3. Wenn eine E-Mail nicht zugestellt werden kann, wird die TimeToSend-Spalte für sie auf 10 Minuten von jetzt an weiter fortgeschrieben.
4. Löschen Sie Datensätze aus der Tabelle, die logisch gelöscht sind. Sie können dies in der App tun oder Sie können einen SQL-Job erstellen, der dies erledigt.

0voto

JonLim Punkte 1372

Wie bereits erwähnt, können Sie einen Webdienst nutzen, an den Sie normalerweise JSON über einen HTTP-Request POSTEN können. Hier sind eine Reihe von Möglichkeiten:

Sie alle bieten unterschiedliche Funktionen und Angebote, also probieren Sie sie auf jeden Fall alle aus und finden Sie heraus, welcher Ihnen am besten gefällt.

(Vollständige Offenlegung: Ich bin der Produktmanager von PostageApp.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X