Okay, so habe ich jetzt seit Ewigkeiten an diesem Projekt gearbeitet, und ich dachte, ich könnte meine Erkenntnisse mit der Welt teilen.
Die IIS SMTP-Server
Alle E-Mails unter Verwendung des IIS SMTP-Servers erstellt werden, in erster Linie auf das Pickup-Verzeichnis gesendet. Wenn Sie eine E-Mail senden, müssen Sie in der Matrix-Zeit arbeiten, um sie tatsächlich dort zu sehen, weil sie wahrscheinlich sofort losgeht.
Auf einer einzelnen Mail-Weg aus der Tür durchläuft es den Warteschlange-Ordner in IIS.
Wenn Sie den Leistungsindikator beobachten möchten, um diesen Prozess zu überwachen, sollten Sie sich die "Remote Queue Length" ansehen. (Der Grund dafür ist, dass die "Local Queue Length" Mails überwacht, die lokal im Netzwerk gesendet werden. "Remote" bezieht sich in diesem Fall auf "Outside into the world". Die spezifische Definition von "Local" entgeht mir beim Senden keine lokale Mail, aber ich stelle mir vor, dass es sich in der Warteschlange befindet, um zu Postfächern zu gelangen, die in der spezifischen Installation von IIS auf dem Server oder einer lokalen Gruppierung enthalten sind.)
Aus Exchange-Sicht scheint es das Äquivalent von Mails zu sein, die gesendet werden die Exchange Domain und diejenigen, die aus dieser Domain in die Welt geschickt werden.
Wie auch immer. Die Remote Queue Length erzählt nicht die ganze Geschichte. Sie müssen auch die Fernwiederholungswarteschlange, die Anzahl der aktuellen ausgehenden Verbindungen und, für Gürtel und geschweifte Klammern, die tatsächliche Anzahl der Dateien im Warteschlangenverzeichnis betrachten.
Hier ist der Grund:
- Remote Queue: Alle Nachrichten, die noch nicht gesendet worden ist, aber oft dies versucht wurde. Die Anzahl der E-Mails, die derzeit offenen -Verbindungen zugewiesen sind, werden nicht gezählt, da sie in einem Zustand sind, in dem sie "versucht" werden.
- Remote-Wiederholungswarteschlange: Alle Nachrichten, die noch nicht gesendet wurden, haben bei einen Punkt in der Vergangenheit einer offenen Verbindung für die Lieferung zugeordnet. Offensichtlich muss die Lieferung fehlgeschlagen sein oder die Nachricht wäre geliefert worden. Alle Nachrichten, die derzeit einer offenen Verbindung für einen Neuversuch zugewiesen sind, werden nicht gezählt.
- Aktuelle ausgehende Verbindungen: Wird angezeigt, wenn der Server versucht, in die Warteschlange gestellte Nachrichten zu senden, kann mehr als eine Nachricht einer ausgehenden Verbindung zugewiesen werden. Die so zugewiesenen Nachrichten werden nicht in der Remote-Warteschlange oder in der Remote Retry-Warteschlange gezählt. Physikalisch
- Dateien im Warteschlangenverzeichnis: Diese zeigt die Anzahl der E-Mails immer noch in das Warteschlange-Verzeichnis. Dies wird verringern, wie Mails erfolgreich geliefert werden.
Beispiel: Wenn Sie 0 ausgehende Verbindungen und 50 Mails im Queue-Verzeichnis haben dann die Remote Queue, Retry Queue und physische Dateien auf 50 alle lesen Wenn ein Wiederholungs Flag gesetzt wird (dies ist eine Einstellung in IIS) erhöht sich die Anzahl der Verbindungen und die Anzahl der Mails in den Warteschlangen sinkt. Bis eine E-Mail zugestellt wird, bleibt die Anzahl der physischen Dateien gleich. Da jedoch mehr als eine E-Mail über eine aktuelle Verbindung gesendet werden kann, kann eine Verbindung dazu führen, dass die Länge der Warteschlange für Warteschlangen und Wiederholungswarteschlangen 47 oder niedriger ist. Wenn während des Wiederholungsversuchs alle E-Mails erfolgreich zugestellt werden, nimmt die Anzahl der physischen Dateien im Warteschlangenverzeichnis ab. Wenn die Verbindung geschlossen wird, sollten sich die Warteschlangenzähler wieder stabilisieren.
Logging
Es ist möglich, mit.Net-Mail-Bibliothek zum Angeben eines Pickup-Verzeichnisses, das vom IIS-Standard getrennt ist. Hier können Sie E-Mails in Warteschlangen schreiben und einen maßgeschneiderten Service erhalten, um die E-Mails gelegentlich in das IIS-Verzeichnis zu verschieben, in dem der IIS-Dienst Aufgaben übernimmt und E-Mails in Warteschlangen versendet.
Um dies zu tun, suchen Sie nach der "DeliveryMethod" -Eigenschaft des SmtpClient-Objekts, die auf SmtpDeliveryMethod.SpecifiedPickupDirectory festgelegt werden sollte.
Um das SpecifiedPickupDirectory tatsächlich festzulegen, sollten Sie die PickupDirectoryLocation-Eigenschaft des SmtpClient festlegen.
Wenn E-Mails an diesen Ort gesendet werden, werden sie als .eml-Dateien gespeichert. Der Dateiname ist eine GUID. Dies bedeutet, dass mehrere E-Mails in einer im Wesentlichen zufälligen Reihenfolge versandt werden. Sie könnten theoretisch Code schreiben, um diese Situation zu adressieren, falls gewünscht. Die .eml-Datei folgt einem Standardformat, das durch Öffnen der .eml im Editor gelesen werden kann. Wenn Sie dies analysieren, können Sie Informationen für ein Protokoll extrahieren.
Ich hoffe, dass dieser hochrangige Überblick über die Funktionsweise des SMTP-Servers in IIS für jemanden hilfreich ist, der sich in einer ähnlichen Position befindet wie im März.