Log Ihre SMTP-Konversationen

Automatisch übersetzt von Deepl

Wie in einem früheren Beitrag versprochen, enthält jedes R-Release weitere Fortschritte in Bezug auf die E-Mail-Funktionalität, die ihre verborgenen Fähigkeiten freisetzt.

4D v17 R5 bietet eine interessante neue Funktion für E-Mail-Protokolle. Manchmal funktioniert während der Entwicklung alles einwandfrei, aber wenn Sie die Software beim Kunden einsetzen, gibt es ein Problem bei der Zustellung von E-Mails. Es kann schwierig sein, herauszufinden, wo der Fehler auftritt, da die Kommunikation verschlüsselt ist und man oft keinen Zugriff auf die Protokolldateien des SMTP-Servers hat. Das Problem hängt sehr wahrscheinlich mit Ihrem SMTP-Server zusammen, aber wie können Sie sicher sein? Starten Sie einfach das SMTP-Protokoll in Ihrer Anwendung! Dieses Protokoll enthält eine Aufzeichnung aller durchgeführten Aktionen, einschließlich derjenigen, die die Verbindung unterbrechen. Noch besser ist, dass dieses Protokoll die Kommunikation mit dem SMTP-Server in einfachem, unverschlüsseltem Text zeigt, was die Analyse erleichtert.

Der Befehl SMTP New transporter Befehl stellt eine Verbindung zu einem SMTP-Server (z. B. Exchange oder Google Mail) her und protokolliert die gesamte Kommunikation zwischen ihm und dem Client.

Aktivieren Sie Log SMTP-Transaktion

Um das SMTP-Kommunikationsprotokoll in Ihrer Datenbank für alle gesendeten E-Mails zu aktivieren, können Sie den folgenden Code verwenden:

SET DATABASE PARAMETER(SMTP Log, 1)

Um ein SMTP Protokoll auf dem Server zu starten, klicken Sie im Fenster 4D Server Administration auf die Schaltfläche „Start Request and Debug Logs“:

Alle SMTP-Transaktionen, die auf 4D Server laufen, werden automatisch protokolliert.

Eine bestimmte Transaktion protokollieren

Wenn Sie eine bestimmte Transaktion protokollieren möchten (z. B. während der Fehlersuche), können Sie die logFile Eigenschaft des SMTP-Objekts verwenden:

$server.host:="yoursmtpserver.com"
$server .user:="login"
$server .password:="psw"
// Enter the path of the log file you want to create
$server .logFile:="C:\\tmp\\SMTPLog.txt"
$transporter :=SMTP New transporter($server)

Beispiel einer SMTP-Protokolldatei

Jede Zeile des Protokolls enthält fünf Informationen:

  • Zähler
  • Datum und Uhrzeit
  • Prozess-ID
  • Eindeutige Prozess-ID
  • Sendeanweisung des Clients („C >“) oder die Antwort des Servers („S <„) mit dem Antwortcode und der zurückgegebenen Beschreibung.

Hier ist das Ergebnis eines Verbindungsversuchs mit einem falschen Kennwort:

1 2019-02-06T15:03:11.586 5 7 ### SMTP Verbunden mit 'smtp.gmail.com' auf Port 465. (gesichert)
2 2019-02-06T15:03:12.142 5 7 S < "220 smtp.gmail.com ESMTP y139sm19463388wmd.22 - gsmtp"
3 2019-02-06T15:03:12.143 5 7 C > "EHLO [192.168.18.9]"
4 2019-02-06T15:03:12.154 5 7 S < "250-smtp.gmail.com bei Ihrem Dienst, [195.68.52.79]"
5 2019-02-06T15:03:12.154 5 7 S < "250-SIZE 35882577"
6 2019-02-06T15:03:12.154 5 7 S < "250-8BITMIME"
7 2019-02-06T15:03:12.154 5 7 S < "250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH"
8 2019-02-06T15:03:12.154 5 7 S < "250-ENHANCEDSTATUSCODES"
9 2019-02-06T15:03:12.161 5 7 S < "250-PIPELINING"
10 2019-02-06T15:03:12.161 5 7 S < "250-CHUNKING"
11 2019-02-06T15:03:12.161 5 7 S < "250 SMTPUTF8"
12 2019-02-06T15:03:12.162 5 7 C > "AUTH PLAIN"
13 2019-02-06T15:03:12.168 5 7 S < "334 "
14 2019-02-06T15:03:12.168 5 7 C > "********************************"
15 2019-02-06T15:03:12.234 5 7 S < "535-5.7.8 Benutzername und Passwort nicht akzeptiert. Learn more at"
16 2019-02-06T15:03:12.234 5 7 S < "535 5.7.8 https://support.google.com/mail/?p=BadCredentials y139sm19463388wmd.22 - gsmtp"
17 2019-02-06T15:03:12.235 5 7 C > "QUIT"
18 2019-02-06T15:03:12.242 5 7 S < "221 2.0.0 closing connection y139sm19463388wmd.22 - gsmtp"
19 2019-02-06T15:03:12.242 5 7 ### SMTP Connection closed67 2019-01-10T11:00:08.653 -5 ### SMTP Connection closed

Schauen wir uns die Vorgänge im Protokoll genauer an:

  • Zeile 1: Öffnen Sie einen Kommunikationskanal zum SMTP-Server über Port 465. Die TLS-Verschlüsselung wird automatisch gestartet und die Kommunikation ist gesichert.
  • Zeile 3: Der Client sendet den Befehl EHLO, um die SMTP-Konversation zu starten.
  • Zeile 4 bis 11: Der Server gibt einige Konfigurationselemente zurück, darunter die Liste der unterstützten Authentifizierungsmethoden(Zeile 7).
  • Zeile 12: Der Client sendet die Authentifizierungsart.
  • Zeile 14: Der Client sendet den Benutzernamen und das Passwort. Sie erscheinen nie im Klartext im Protokoll, sondern werden durch „*“s ersetzt.
  • Zeile 15 und 16: Server gibt Fehler 535 zurück, Authentifizierung fehlgeschlagen.
  • Zeile 17: Der Client sendet den Befehl „QUIT“, um die Verbindung mit dem Server zu beenden.

Wie Sie anhand dieses Beispiels sehen können, ist es jetzt einfach, Kommunikationsprobleme zu beheben.

Viel Spaß beim Loggen!

Fabrice Mainguené
- Product Owner -Fabrice Mainguené gehört seit November 2016 zum 4D Program Team. Als Product Owner ist er verantwortlich für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen. Seine Aufgabe ist es auch, sicherzustellen, dass die gelieferte Funktionsimplementierung den Kundenanforderungen entspricht.Nach seinem Bachelor-Abschluss in Informatik am CNAM arbeitete Fabrice als Windev-Entwickler bei einem kleinen Software-Verlag. Danach arbeitete er für verschiedene Unternehmen in Industrie und Handel als Windev- und Webentwickler sowie als technischer Berater für neue Funktionen.