IIS SMTP Pickup-Ordner als Dateifreigabe verfügbar machen - schlechte Idee?

7

Umgebung:

  • IIS-Webfarm
    • 5 Server
    • Windows Server 2008 R2
    • IIS 7.5
    • ASP.NET 3.5 und 4.0 Webanwendung

Unsere Web-App muss, wie viele andere auch, E-Mails senden. Nur senden, nicht empfangen.

In der Vergangenheit haben wir den IIS 6-SMTP-Dienst auf jedem Webserver aktiviert und die .NET-SMTP-Klassen verwendet, um E-Mail-Dateien im Abholordner abzulegen. Funktioniert gut.

Um die Umgebung zu vereinfachen und weniger Dienste auf den Webservern auszuführen, erwäge ich, den SMTP-Dienst auf nur einem Windows-Dienstprogramm auszuführen und das Abholverzeichnis den übrigen Webservern in der Farm mithilfe von a zur Verfügung zu stellen Dateifreigabe. Die ASP.NET-Webanwendungen legen ihre E-Mail-Dateien einfach im freigegebenen Abholordner ab, und der einzelne SMTP-Dienst verarbeitet den ausgehenden E-Mail-Fluss für alle Webserver. Ich mache mir keine Sorgen um das Volumen oder die Fähigkeit des SMTP-Dienstes, Schritt zu halten, das ist kein Problem.

Die Profis:

  • Vereinfachte Verwaltung und Konfiguration
  • Geringere Auslastung und reduzierter Angriffsvektor auf den Webservern
  • Ein einziger Punkt zur Fehlerbehebung bei E-Mail-Problemen

Die Nachteile:

  • Der Punkt des Versagens
  • Wenn ich das Dienstprogramm neu starten muss, gehen die Funktionen für ausgehende E-Mails verloren. Dies könnte möglicherweise durch die Verwendung des Offline-Ordner-Caching für die Dateifreigabe auf den Webservern verringert werden. Ich habe es nicht getestet, aber möglicherweise können die Webserver, die keine Verbindung zur Dateifreigabe feststellen, ihre Dateien lokal löschen, um beim Neustart automatisch mit dem SMTP-Server synchronisiert zu werden.
  • Konflikt zwischen E-Mail-Dateinamen - Sie müssen sicherstellen, dass ASP.NET beim Schreiben der EML-Dateien einen garantierten eindeutigen Namen für die gesamte Webfarm verwendet. Der SmtpClient-Quellcode gibt an, dass eine GUID zum Benennen der Dateien verwendet wird, aber MS könnte dies in einer zukünftigen Implementierung ändern.

Ob das funktioniert?

Bearbeiten: Wenn ich mehr über meine Idee für Offlinedateien nachdenke, bin ich mir nicht sicher, ob dies der beste Ansatz ist. Für Offlinedateien ist eine geplante Aufgabe erforderlich, um die Synchronisierung zu planen. Bei jeder Ausführung werden alle Mail-Dateien der anderen Webserver vom lokalen Cache jedes anderen Servers abgerufen. Vielleicht ist es eine bessere Idee, die Dateien einfach in einem lokalen Ordner zu stapeln, und ein anderer Job (geplante Robokopie) versucht, sie auf die Remote-Dateifreigabe zu kopieren, wann immer sie aktiv sind. Hatte über DFSR nachgedacht, aber ich werde wieder alle Mail-Dateien auf alle Webserver mischen, und das ist verschwenderisch.

Larry Silverman
quelle
Mit Resharper habe ich die Quelle für SmtpClient.cs abgerufen und bestätigt, dass zum Erstellen des E-Mail-Dateinamens eine GUID verwendet wird. Meine Lösung ist also sicher, solange sich das nicht ändert. Natürlich gibt es keine Garantie, die sich nicht ändert.
Larry Silverman
2
Denken Sie, Offline-Dateien mischen möglicherweise mehr Dateien als erwartet. SMTP auf jedem klingt nach einer besseren Wette; Es ist eine Warteschlange eingebaut. Verwenden Sie einfach die andere Box als Smart Host und stecken Sie sie in den Boden.
TristanK
Vielen Dank. Ich habe eine Bearbeitung hinzugefügt, nachdem ich ein wenig nach Offline-Dateien gesucht und das Gleiche festgestellt habe. Es ist ein guter Punkt, dass lokale SMTPs, die einem Smart Host zugeordnet sind, ihre eigenen Warteschlangen verwalten und E-Mails weiterleiten, wenn dies möglich ist. Zumindest kauft mir das eine relativ zentralisierte Fehlerbehebung und Protokollierung ausgehender E-Mail-Fehler. Aber es erfordert immer noch die Installation von SMTP überall, was eines der wichtigsten Dinge ist, die ich vermeiden wollte.
Larry Silverman
Warten Sie eine Sekunde - welchen SMTP-Server verwenden Sie? Ihr Web - Server , die Sie sagen , laufen Win 2008 R2 / IIS 7.5, aber Sie erwähnen IIS 6 SMTP unterhalb und Ihr Beitrag mit IIS6 markiert, nicht IIS7.5 so vielleicht eine wenig Klärung erforderlich ist
August
1
All dies ist wahr. IIS7 oder 7.5 ist kein SMTP-Dienst zugeordnet. MS hat gerade die alte Engine von IIS6 wiederverwendet. Um sie verwenden zu können, müssen Sie mehrere Komponenten von IIS6 installieren, einschließlich der IIS 6-Verwaltungstools.
Larry Silverman

Antworten:

2

Besser wäre es, SMTP über TCP / IP zu verwenden, dh Port 25 (oder einen anderen Port) abzuhören und dann MailMessage und SmtpClient von System.Net.Mail zu verwenden.

Sie können dann einen Load Balancer vor den SMTP-Server werfen und jeden Server mit diesem Load Balanced-Namen / dieser IP-Adresse verbinden lassen.

Christopher_G_Lewis
quelle
Danke, ich mag diesen Vorschlag. Ich könnte mit dem Lastenausgleich von zwei SMTP-Instanzen leben. Es ist weniger Verwaltungsaufwand als die Installation von Instanzen auf jedem Webserver. Und ich kann dies in einer aktiven / passiven Anordnung tun, so dass ich hauptsächlich zu einem Server gehen kann, um normale E-Mail-Probleme zu beheben.
Larry Silverman
Ich werde auch erwähnen, dass wir SmtpClient verwenden und die PickupDirectoryFromIis DeliveryMethod verwendet haben, sodass der SmtpClient eine EML-E-Mail-Datei zur Zustellung direkt in das Abholverzeichnis schreibt. Wenn Sie den lokalen SMTP-Dienst verwenden, ist dies der schnellste Weg, um die E-Mail "zu senden", damit die Webseite mit allem, was sie sonst noch tut, weitermachen kann. Es gibt auch eine DeliveryMethod mit dem Namen SpecifiedPickupDirectory, mit der Sie entscheiden können, wo die Mail-Datei abgelegt wird. Auf diese Weise sollte meine Idee für die Dateifreigabe funktionieren.
Larry Silverman
@ LarrySilverman Ich dachte du wolltest es schnell?! Das Reduzieren der Endpunkte für SmtpClient von 5 auf 2 beträgt weniger als die Hälfte. Aus diesem Grund wollte ich (und Sie) einen Endpunkt pro Webserver. So kann SmtpClient über ein lokales Loopback-Gerät anstelle des langsamen "Intranets" arbeiten. Ich kann nicht verstehen, warum Sie diese Antwort akzeptiert haben.
Mailq
Geschwindigkeit ist schön, aber es war keine festgelegte Voraussetzung. Wir senden nicht so viel Post. Wichtiger für mich ist die einfache Verwaltung und Fehlertoleranz.
Larry Silverman
4

Ich kann Ihren Standpunkt hier nicht sehen. Sie versuchen, Ihre Einrichtung zu vereinfachen, indem Sie komplexere und sicherheitstechnische Probleme verursachen.

SMTP ist die Lösung für Ihr Problem. Jetzt müssen Sie nur noch nach einer guten Implementierung suchen. SMTP verfügt über eine integrierte Warteschlangenbehandlung (keine Kollisionen mit Dateinamen), ist ausfallsicher, redundanzbewusst aufgrund mehrerer MX und ist ein altes, gut getestetes Protokoll. Übrigens ist es betriebssystemunabhängig.

Sie möchten dies mit einem Single-Point-of-Failure-, Scheduler-abhängigen, betriebssystemgebundenen, undokumentierten und neuen, nicht getesteten Verfahren zur Neuerfindung des Rads austauschen. Außerdem stellen Sie nicht nur für diese 5 Server ein Drop-In-Box für alle bereit.

Verwenden Sie einen einfachen Store-and-Forward-Server (wie E-MailRelay ) auf den Webservern und einen zentralen SMTP-Server, an den die E- Mails weitergeleitet werden. Dieser SMTP-Server wird dann für die endgültige Zustellung verwendet. Dann können Sie Ihr zentrales SMTP so sichern, dass nur Verbindungen von diesen 5 Servern akzeptiert werden und absenderbasiert abgelehnt werden oder welche Filter / Blöcke Sie verwenden möchten, um das potenzielle (Spam-) Risiko für die Öffentlichkeit zu verringern.

Diese Lösung bietet alle Vorteile: Transparenz (Protokollierung + Überwachung), Einfachheit (ein Prozess), Konformität (Standard-Internetprotokoll) und Integrität (Zustellbestätigung). Keine Notwendigkeit, selbst erstellte Problemumgehungen auszutauschen.

mailq
quelle
Vielen Dank. Ich stimme Ihrem Standpunkt hinsichtlich des erhöhten Risikos zu, das Drop-In-Feld für alle zugänglich zu machen, die möglicherweise Zugriff auf die Dateifreigabe erhalten. Ich bin nicht davon überzeugt, jedem Webserver eine weitere Komponente eines Drittanbieters hinzuzufügen. Ich würde den integrierten IIS-SMTP-Dienst eher als Smart-Host-Relay verwenden, wie TristanK in seinem Kommentar zu meiner ursprünglichen Frage vorgeschlagen hat.
Larry Silverman