Unerklärbares Verhalten beim SMTP-E-Mail-Versand
Hallo!
Wir haben eine in C# selbst entwickelte Software, die unter anderem E-Mails über SMTP verschickt. Diese Software ist bei vielen Kunden seit Jahren im Einsatz – sie ist jeden Arbeitstag im Dauerbetrieb, und es werden damit täglich Hunderte von E-Mails verschickt. Nur bei einem Kunden haben wir eine Merkwürdigkeit, und wir kommen nicht darauf, was es sein könnte.
Es handelt sich dabei um ein kleines Netzwerk mit einem Windows-Server 2022 Standard und fünf Arbeitsstationen. Der Server sieht im Groben so aus:
ASUS SERVER P12R-E/10G-2T S1200 C256/VGA/2xGBL/ATX
ASUS SERVER ASMB10-iKVM Modul für P12R
CPU Intel Xeon E-2356G/3.2 GHz/12MB/UP/LGA1200/Tray
64 GB RAM PC3200, ECC/UB, Samsung (2Rx8)
5 SSD 2.5" 1.92TB Samsung PM1643a SAS3 (RAID10 3.49TB + Hotspare)
BC MegaRAID 9560-8i PCIe x8 SAS/NVMe
Als Switch verwendet der Kunde folgendes Modell:
NETGEAR JGS524 Switch 24 Port Gigabit Ethernet LAN Switch
Die Arbeitsstationen:
Micro-PC
CPU Core i7-1165G7
16 GB SO DDR4-RAM,
SSD 500GB M.2 NVMe SSD
WLAN, 1x LAN 10/100/1000 (Netz läuft über Kabel mit 1 GBit/s)
Windows 11 Pro
Nun ist es so, dass nur in diesem Netzwerk der SMTP-Versand des Öfteren in ein Timeout läuft. Versucht es der Anwender ein zweites Mal, dann geht es fast immer.
Das Timeout ist auf Standard 100 Sekunden eingestellt, sodass man genug Zeit hat, E-Mails zu versenden. Diese sind auch samt Anlagen in der Regel um die 120 KB klein.
Wir haben bis zur Stelle gedebuggt, bis die E-Mail verschickt wird:
SmtpClient.Send()
Hierbei handelt es sich um den SMTP-Client von .NET.
Die Anwendung verharrt bei Fehlern auf der Methode "SmtpClient.Send()" und gibt erst nach 100 Sekunden mit einer Ausnahme auf, welche nur sagt, dass das Timeout erreicht wurde:
"System.Net.Mail.SmtpException: Timeout für den Vorgang wurde überschritten."
Nun gehen mir die Ideen aus. Ich glaube auch nicht, dass das Programm einen Fehler hat – dann müsste dieser bei irgendeinem anderen Kunden aufgetreten sein, was aber nicht der Fall ist. Daher tippe ich auf die Netzwerk-/Sicherheitskonfiguration des Kunden.
Nun wollte ich fragen, ob jemand Ähnliches erlebt hat und eventuell auch Lösungsansätze hat, die mir vielleicht auf die richtige Spur bringen.
Danke im Voraus und liebe Grüße
René
Wir haben eine in C# selbst entwickelte Software, die unter anderem E-Mails über SMTP verschickt. Diese Software ist bei vielen Kunden seit Jahren im Einsatz – sie ist jeden Arbeitstag im Dauerbetrieb, und es werden damit täglich Hunderte von E-Mails verschickt. Nur bei einem Kunden haben wir eine Merkwürdigkeit, und wir kommen nicht darauf, was es sein könnte.
Es handelt sich dabei um ein kleines Netzwerk mit einem Windows-Server 2022 Standard und fünf Arbeitsstationen. Der Server sieht im Groben so aus:
ASUS SERVER P12R-E/10G-2T S1200 C256/VGA/2xGBL/ATX
ASUS SERVER ASMB10-iKVM Modul für P12R
CPU Intel Xeon E-2356G/3.2 GHz/12MB/UP/LGA1200/Tray
64 GB RAM PC3200, ECC/UB, Samsung (2Rx8)
5 SSD 2.5" 1.92TB Samsung PM1643a SAS3 (RAID10 3.49TB + Hotspare)
BC MegaRAID 9560-8i PCIe x8 SAS/NVMe
Als Switch verwendet der Kunde folgendes Modell:
NETGEAR JGS524 Switch 24 Port Gigabit Ethernet LAN Switch
Die Arbeitsstationen:
Micro-PC
CPU Core i7-1165G7
16 GB SO DDR4-RAM,
SSD 500GB M.2 NVMe SSD
WLAN, 1x LAN 10/100/1000 (Netz läuft über Kabel mit 1 GBit/s)
Windows 11 Pro
Nun ist es so, dass nur in diesem Netzwerk der SMTP-Versand des Öfteren in ein Timeout läuft. Versucht es der Anwender ein zweites Mal, dann geht es fast immer.
Das Timeout ist auf Standard 100 Sekunden eingestellt, sodass man genug Zeit hat, E-Mails zu versenden. Diese sind auch samt Anlagen in der Regel um die 120 KB klein.
Wir haben bis zur Stelle gedebuggt, bis die E-Mail verschickt wird:
SmtpClient.Send()
Hierbei handelt es sich um den SMTP-Client von .NET.
Die Anwendung verharrt bei Fehlern auf der Methode "SmtpClient.Send()" und gibt erst nach 100 Sekunden mit einer Ausnahme auf, welche nur sagt, dass das Timeout erreicht wurde:
"System.Net.Mail.SmtpException: Timeout für den Vorgang wurde überschritten."
Nun gehen mir die Ideen aus. Ich glaube auch nicht, dass das Programm einen Fehler hat – dann müsste dieser bei irgendeinem anderen Kunden aufgetreten sein, was aber nicht der Fall ist. Daher tippe ich auf die Netzwerk-/Sicherheitskonfiguration des Kunden.
Nun wollte ich fragen, ob jemand Ähnliches erlebt hat und eventuell auch Lösungsansätze hat, die mir vielleicht auf die richtige Spur bringen.
Danke im Voraus und liebe Grüße
René
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7940237821
Url: https://administrator.de/contentid/7940237821
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
45 Kommentare
Neuester Kommentar
Moin,
Hast Du mal parallel mitgesnifft, was sich auf der Leitung tut, wenn diese verhalten auftritt?
Oder einfach mal einen smarthost (raspi oder kleine linux-VM) dazwischengeschaltet, um zu schauen, ob sich das Verhalten dann ändert?
Als Entwickler solltet ihr schon wissen, wie man debugged und nicht einfach nur "Bauklötze zusammensteckt".
lks
Hast Du mal parallel mitgesnifft, was sich auf der Leitung tut, wenn diese verhalten auftritt?
Oder einfach mal einen smarthost (raspi oder kleine linux-VM) dazwischengeschaltet, um zu schauen, ob sich das Verhalten dann ändert?
Als Entwickler solltet ihr schon wissen, wie man debugged und nicht einfach nur "Bauklötze zusammensteckt".
lks
Zitat von @temuco:
Einen Smarthost könnte man versuchen. Einen Sniffer wäre aber die letzte Möglichkeit, allerdings nur, wenn das auch honoriert wird, denn es sonst läuft seit 13 Jahren bei allen anderen fehlerfrei.
Einen Smarthost könnte man versuchen. Einen Sniffer wäre aber die letzte Möglichkeit, allerdings nur, wenn das auch honoriert wird, denn es sonst läuft seit 13 Jahren bei allen anderen fehlerfrei.
Moin,
Auch wenn es die letzten 13 Jahre funktioniert hat, heißt das nicht, daß da keine Bugs drin sind. Und einen wireshark anwerfen kostet nur ein paar Minuten. Wenn das nachweist, daß der Fehler nicht bei euch liegt, ist das mehr wert als eine nicht berechnete halbe Stunde. Denn dann könnt ihr begründen, warum ihr den den Aufwand abrechnen wollt.
lks
Zitat von @temuco:
Das habe ich verschlampt, sorry! Ja, die SMTP-Server sind immer erreichbar. In der Regel (auch in diesem Fall) handelt es sich um Exchange-Online von einem Microsoft-365-Plan. Ein paar wenige schicken über deren Internet-Provider. Nur bei diesem Kunden könnte ich vor dem Versand die Erreichbarkeit seines Exchange-Online prüfen.
Zitat von @manuel-r:
Hallo
Ist denn von da aus wo eure Software läuft überhaupt eine SMTP-Verbindung zum Zielserver möglich? Du schreibst leider nicht genau, wo eure Software läuft und wo der SMTP-Server. Oder ich hab's überlesen.
Hallo
Ist denn von da aus wo eure Software läuft überhaupt eine SMTP-Verbindung zum Zielserver möglich? Du schreibst leider nicht genau, wo eure Software läuft und wo der SMTP-Server. Oder ich hab's überlesen.
Das habe ich verschlampt, sorry! Ja, die SMTP-Server sind immer erreichbar. In der Regel (auch in diesem Fall) handelt es sich um Exchange-Online von einem Microsoft-365-Plan. Ein paar wenige schicken über deren Internet-Provider. Nur bei diesem Kunden könnte ich vor dem Versand die Erreichbarkeit seines Exchange-Online prüfen.
Eigentlich zielte die Frage darauf ab, ob der Rechner auf dem eure Software läuft per SMTP zum Mailserver kommt. Bei uns bspw. dürfen nur bestimmte Server per SMTP nach außen und Clients gar nicht.
Manuel
Hallo,
Wie schon gesagt wurde. Mit einen Kabelhai nachsehen warum das Passiert. https://www.wireshark.org/download.html
Oder dem SMTP Server betreiber (Microsoft) bitten das die dir ihre SMTP Logs geben wo deine Software versuht sich zu Verbinden.
Gruß,
Peter
P.S. Wireshark ist schneller, ergiebiger. Aber kläre auf jeden Fall ob das dein Kunde dir Bezahlt.
Wie schon gesagt wurde. Mit einen Kabelhai nachsehen warum das Passiert. https://www.wireshark.org/download.html
Oder dem SMTP Server betreiber (Microsoft) bitten das die dir ihre SMTP Logs geben wo deine Software versuht sich zu Verbinden.
Gruß,
Peter
P.S. Wireshark ist schneller, ergiebiger. Aber kläre auf jeden Fall ob das dein Kunde dir Bezahlt.
Moin...
da fehlt mir persönlich beim entwickler die ernsthaftigkeit, oder wissen!
Frank
P.S. Wireshark ist schneller, ergiebiger. Aber kläre auf jeden Fall ob das dein Kunde dir Bezahlt.
also wenn er schon den IIS als smarthost installiert hat, und über postfix nachdenkt kommt es auf die 10 Minuten mit dem Kabelhai auch nicht mehr an!da fehlt mir persönlich beim entwickler die ernsthaftigkeit, oder wissen!
Frank
Moin,
es könnte auch entscheidend sein, welche Digitalisierungsbox genau zum Einsatz kommt (Standard, Premium 1/2, Basic, Smart usw.), die haben alle so ihre Eigenheiten und der (Hardware-)Unterbau kommt von unterschiedlichen Herstellern (Zyxel, bintec ...).
Macht eure Software SMTP-Auth? Ist das bei dem Kunden freigeschaltet auf O365 Seite und hat der verwendete Benutzer mindestens eine Exchange Online Lizenz zugewiesen?
Als Referenz kannst Du bspw. dies nehmen: https://learn.microsoft.com/de-de/exchange/mail-flow-best-practices/how- ...
Dann wäre auch noch wichtig, dass mindestens TLS 1.2 unterstützt und verwendet wird - vielleicht versucht er es beim ersten Mal mit 1.0/1.1 und das muss fehlschlagen.
Gruß
cykes
es könnte auch entscheidend sein, welche Digitalisierungsbox genau zum Einsatz kommt (Standard, Premium 1/2, Basic, Smart usw.), die haben alle so ihre Eigenheiten und der (Hardware-)Unterbau kommt von unterschiedlichen Herstellern (Zyxel, bintec ...).
Macht eure Software SMTP-Auth? Ist das bei dem Kunden freigeschaltet auf O365 Seite und hat der verwendete Benutzer mindestens eine Exchange Online Lizenz zugewiesen?
Als Referenz kannst Du bspw. dies nehmen: https://learn.microsoft.com/de-de/exchange/mail-flow-best-practices/how- ...
Dann wäre auch noch wichtig, dass mindestens TLS 1.2 unterstützt und verwendet wird - vielleicht versucht er es beim ersten Mal mit 1.0/1.1 und das muss fehlschlagen.
Gruß
cykes
Zitat von @temuco:
Was bleibt noch übrig? Postfix? Da müsste ich aber einen virtuellen Linux aufsetzen. hMailServer? Ok, das könnte eine passende Alternative sein.
Moin,
Wie ich gleich zu Anfang sagte: 15 -30 Minuten in das sniffen mit Wireshark Inverstieren, egal ob Kunde das bezahlt oder nicht und dann weißt Du, an welcher Stelle das hängt. Danach kann man entweder seinen eigenen Fehler beheben oder dem Kunden darlegen, daß die Fehlersuche Geld kostet.
lks
PS: warum macht eure Software keinen Retry, wenn der erste Versuch schiefgeht?
PPS: ein kleiner smarthost mit raspi oder ähnlichem ist für unter 100€ ist deutlich billiger und zeitsparender als stundenlanges herumexperimentieren.
P3S: und wenn Du weder eine VM noch einen Raspi aufsetzen willst, kannst Du immer noch das Windows Subsystem für Linux nutzen: https://www.leibling.de/office-365-mit-postfix-unter-windows-mit-linux/
Zitat von @temuco:
Was bleibt noch übrig? Postfix? Da müsste ich aber einen virtuellen Linux aufsetzen. hMailServer? Ok, das könnte eine passende Alternative sein.
Moin,
Wie ich gleich zu Anfang sagte: 15 -30 Minuten in das sniffen mit Wireshark Inverstieren, egal ob Kunde das bezahlt oder nicht und dann weißt Du, an welcher Stelle das hängt. Danach kann man entweder seinen eigenen Fehler beheben oder dem Kunden darlegen, daß die Fehlersuche Geld kostet.
lks
PS: warum macht eure Software keinen Retry, wenn der erste Versuch schiefgeht?
PPS: ein kleiner smarthost mit raspi oder ähnlichem ist für unter 100€ ist deutlich billiger und zeitsparender als stundenlanges herumexperimentieren.
P3S: und wenn Du weder eine VM noch einen Raspi aufsetzen willst, kannst Du immer noch das Windows Subsystem für Linux nutzen: https://www.leibling.de/office-365-mit-postfix-unter-windows-mit-linux/
Dauert auch nur Minuten - da längste dürfte der reboot der Windows-Küste sein - und sollte dein Problem auch umgehen.
Hallo,
Gruß,
Peter
Zitat von @temuco:
Werden wir dennoch zukünftig implementieren. Aber genau deswegen hat die Lösung mit einem Smarthost ziemlich Scharm: E-Mail wird lokal im LAN an den Smarthost übergeben und dieser kümmert sich um den Rest.
Nur das dann der Smarthost keine Mails senden kann. Wo Ist das eine Lösung ohne die Ursache zu kennen? Aber wenn deine Kunden schon die Anwendung killen obwohl die noch versucht E-Mails zu versenden, legt das nahe das deine Kunden unfähig sind oder E-Mails extremst wichtig sind das dem nicht Versenden einen Weltuntergang gleichkommt.Werden wir dennoch zukünftig implementieren. Aber genau deswegen hat die Lösung mit einem Smarthost ziemlich Scharm: E-Mail wird lokal im LAN an den Smarthost übergeben und dieser kümmert sich um den Rest.
Gruß,
Peter
Zitat von @Pjordorf:
Hallo,
Hallo,
Zitat von @temuco:
Werden wir dennoch zukünftig implementieren. Aber genau deswegen hat die Lösung mit einem Smarthost ziemlich Scharm: E-Mail wird lokal im LAN an den Smarthost übergeben und dieser kümmert sich um den Rest.
Nur das dann der Smarthost keine Mails senden kann.Werden wir dennoch zukünftig implementieren. Aber genau deswegen hat die Lösung mit einem Smarthost ziemlich Scharm: E-Mail wird lokal im LAN an den Smarthost übergeben und dieser kümmert sich um den Rest.
Wenn es nach einem retry geht, schafft der smarthost das. denn dem kann man sagen, wie oft und wie lange er es probieren soll. Insbesondere wenn es beim zwiten Versuch immer geht, kann man mit einem smarthost den gfehler umgehen. (lösen ist allerdings etwas anderes).
Wo Ist das eine Lösung ohne die Ursache zu kennen?
Ja, das ist ja nur ein workaround. Aber das ist heutztage die Arbeitsweise bei den meisten Firmen.
Hängt aber auch damit zusammen, daß 10 Manntage Fehlersuche und -behebung mehr kosten als ein RasPi und 1/2h Arbeitszeit.
lks
Zitat von @temuco:
Firmen müssen Geld verdienen und daher immer wieder abwägen, wie man mit solchen Sachen vorgeht.
Firmen müssen Geld verdienen und daher immer wieder abwägen, wie man mit solchen Sachen vorgeht.
Klar. Aber trotzdem sollte man Qualitätssicherung betreiben.
Und nein, es sind kein 10 Manntage.
Das war ironisch gemeint. Soltle nur übertrieben darstellen, daß der Aufwand zwischen Workaround und chter fehlerbehebung nicht unerheblich ist. (weißt schon "unsichbare Ironitags").
lks
Natürlich. Man sieht dann, welcher Protokollteilnehmer schleudert.
lks
Gibt es evtl Gemeinsamkeiten bei den Mail Adressen, bei denen der Timeout kommt?
Bzw gibt es Adressen bei denen nie ein Timeout kommt?
Das könnte auch auf ein DNS Problem hinweisen und das macht vermutlich die Digitalisierungsbox (Smart von bintec elmeg).
Habt ihr gestern was rausgefunden mit Wireshark?
Bzw gibt es Adressen bei denen nie ein Timeout kommt?
Das könnte auch auf ein DNS Problem hinweisen und das macht vermutlich die Digitalisierungsbox (Smart von bintec elmeg).
Habt ihr gestern was rausgefunden mit Wireshark?
Zitat von @temuco:.
Sehr merkwürdig: Seitdem wir darum gebeten haben, uns sofort alle Fehler mitzuteilen, hören wir vom Kunden nichts mehr...
Sehr merkwürdig: Seitdem wir darum gebeten haben, uns sofort alle Fehler mitzuteilen, hören wir vom Kunden nichts mehr...
Vielleicht ist es ja auch nur ein 'PEBKAC' gewesen der es jetzt richtig macht.
lks
Hallo,
Hättet ihr damals beim Programmieren nicht nur Bauklötzchen zusammengesteckt sondern auch ein Logging eingebaut wüsstet ihr schon lange was dort als Antwort zurückkommt und du müsstest heute nicht über Geldausgaben dir deinen Kopf zerbrechen.
Und dein Wireshark nur auf SMTP und DNS ansetzen. Nicht das ganze Internet mitschneiden, nicht das wir kein Internet mehr haben
Gruß,
Peter
Zitat von @temuco:
Ich habe den Fehler noch nicht gefunden, denn er taucht plötzlich beim Kunden nicht mehr auf. Allerdings habe ich eine Vermutung:
Falsche Vermutung.Ich habe den Fehler noch nicht gefunden, denn er taucht plötzlich beim Kunden nicht mehr auf. Allerdings habe ich eine Vermutung:
Adresse mehrmals anpinge, sehe ich, dass die IP-Adresse immer wieder wechselt:
Ja, wie soll es auch mit nur einer IP denn füt Millionen Teilnehmern sonst funktionieren?Was ist, wenn durch eine zwischengespeicherte IP-Adresse die falsche genutzt wird?
Dann wird die falsche halt verwendet...Hättet ihr damals beim Programmieren nicht nur Bauklötzchen zusammengesteckt sondern auch ein Logging eingebaut wüsstet ihr schon lange was dort als Antwort zurückkommt und du müsstest heute nicht über Geldausgaben dir deinen Kopf zerbrechen.
Und dein Wireshark nur auf SMTP und DNS ansetzen. Nicht das ganze Internet mitschneiden, nicht das wir kein Internet mehr haben
Gruß,
Peter
Moin...
neeee, hat er nicht!
hm... da ist aber auch etwas dran....
Du hast entweder keine Ahnung oder die beste Glaskugel. Entweder hilfst du oder sparst du dir die Belehrungen. Der Ton macht die Musik und ich bin bisher sicher weder laut, noch singe ich schief.
oha... dann schreibe uns doch mal bitte was dein Programm im SMTP log ausgiebt!
du hast doch ein SMTP log oder?
Ich danke dir, dass du das verstehst und zurück zu einem für ein Hilfe- und Austauschsforum angenehmen Miteinander kehrst.
oha...
du sollst nur SMTP mitschneiden nix mehr... DNS wäre auch noch sinvoll, mehr aber nicht!
Liebe Grüße
von mir auch...
René
Frank
neeee, hat er nicht!
Hättet ihr damals beim Programmieren nicht nur Bauklötzchen zusammengesteckt sondern auch ein Logging eingebaut wüsstet ihr schon lange was dort als Antwort zurückkommt und du müsstest heute nicht über Geldausgaben dir deinen Kopf zerbrechen.
Du hast entweder keine Ahnung oder die beste Glaskugel. Entweder hilfst du oder sparst du dir die Belehrungen. Der Ton macht die Musik und ich bin bisher sicher weder laut, noch singe ich schief.
du hast doch ein SMTP log oder?
Ich danke dir, dass du das verstehst und zurück zu einem für ein Hilfe- und Austauschsforum angenehmen Miteinander kehrst.
Wir nehmen alles im Ring auf – maximal 80 Dateien à 250 MB. In Moment sind wir schon bei 74 Logdateien und 17,2 GB.
Alter, was Feiert ihr da?du sollst nur SMTP mitschneiden nix mehr... DNS wäre auch noch sinvoll, mehr aber nicht!
Liebe Grüße
René
Hallo,
Ne ausgelassene Kabelhai Excess (Division durch 0) Party. Weil für vernünftige Fehlersuche kein Budget existiert, und vor 13 Jahren keiner daran dachte das mal in Zukunft was an Protokollen geändert werden könnte. Wer Logs einbaut ist halt Feige und verbrennt nur Kohle
Gruß,
Peter
Ne ausgelassene Kabelhai Excess (Division durch 0) Party. Weil für vernünftige Fehlersuche kein Budget existiert, und vor 13 Jahren keiner daran dachte das mal in Zukunft was an Protokollen geändert werden könnte. Wer Logs einbaut ist halt Feige und verbrennt nur Kohle
Gruß,
Peter
Oder einfach nur einen debug-switch, der bei Bedarf statusinformationen ausgibt.
lks
Zitat von @temuco:
Falls es interessiert:
Ich habe den Fehler noch nicht gefunden, denn er taucht plötzlich beim Kunden nicht mehr auf.
Falls es interessiert:
Ich habe den Fehler noch nicht gefunden, denn er taucht plötzlich beim Kunden nicht mehr auf.
Rene, ist der Fehler jetzt bisher nie mehr gemeldet worden?
Würde mich schon interessieren wie das ausgegangen ist...
Zitat von @temuco:
Ich habe dem Kunden schon letzte Woche mitgeteilt, er und seine Mitarbeiter sollen jeden Fehler manuell protokollieren und uns sofort kontaktieren. Seitdem ist es Ruhe...
Ich habe dem Kunden schon letzte Woche mitgeteilt, er und seine Mitarbeiter sollen jeden Fehler manuell protokollieren und uns sofort kontaktieren. Seitdem ist es Ruhe...
Wie meine Kristallkugel schon sagte, vermutlich ein PEBKAC, der jetzt durch die erhöhte Aufmerksamkeit den Fehler, den er sonst immer macht, vermeidet.
lks
Hallo,
?!?
Gruß,
Peter
?!?
Seitdem ist es Ruhe...
Könnte auch ruhig sein weil der Kunde nicht mehr dein Kunde ist und nichts mehr (nach all den schönen Jahren) mit euch zu tun haben willGruß,
Peter