SMTP/Analyse
SMTP mit telnet oder openssl testen
Manchmal muss ich testen, ob ein bestimmter Rechner in der Lage ist, E-Mails über einen SMTP-Server zu versenden. Die Verwendung von Telnet oder Openssl ist eine gute Möglichkeit, um Verbindungsprobleme zu testen und zu beheben.
Wir verwenden Sendgrid für den Versand von Mails in den meisten unserer Webanwendungen, daher werde ich ihren SMTP-Server als Beispiel verwenden.
Anforderungen
Bevor wir anfangen können, müssen Sie sicherstellen, dass Sie telnet oder openssl installiert haben. Beide werden bei den meisten Linux-Distributionen standardmäßig installiert. Wenn sie nicht installiert sind, können Sie sie mit Ihrem Standard-Paketmanager holen:
sudo yum install telnet openssl
Auf dem Mac können Sie es mit Homebrew installieren:
Verbinden mit dem SMTP-Server
Um eine Verbindung zu smtp.sendgrid.com herzustellen, geben Sie den folgenden Befehl ein:
Wenn die Verbindung hergestellt ist, erhalten Sie eine Ausgabe ähnlich der folgenden zurück:
Es ist wichtig zu wissen, dass wir eine unverschlüsselte Verbindung aufgebaut haben. Das bedeutet, dass alle Informationen im Klartext an den Server gesendet werden. Da wir uns authentifizieren und Passwörter senden müssen, empfehle ich eine Verbindung über SSL oder TLS, wenn Ihr Server dies unterstützt.
Um eine Verbindung über das TLS-Protokoll an Port 587 herzustellen, verwenden Sie:
Um SSL auf Port 465 zu verwenden:
Sie erhalten eine Vielzahl von Ausgaben zur SSL-Sitzung und den verwendeten Zertifikaten, aber danach sehen Sie eine ähnliche Bestätigung wie beim Telnet-Befehl (einen 220- oder 250-Statuscode mit einer Meldung). Zum Beispiel:
Initiieren Sie das Gespräch
Nun müssen wir uns identifizieren und die SMTP-Konversation mit dem Befehl EHLO einleiten. Dieser Befehl benötigt eine IP-Adresse oder einen Domänennamen als Argument:
Auf den meisten SMTP-Servern erhalten Sie eine Liste von Befehlen zurück, wenn Sie den Befehl Extended Hello (EHLO) verwenden:
Authentifizieren Sie sich
Zeit, sich anzumelden! In der vorherigen Ausgabe wurden der AUTH-Befehl und die verfügbaren Mechanismen aufgeführt. In diesem Fall PLAIN und LOGIN.
PLAIN verwenden
Der PLAIN-Mechanismus erwartet eine base64-kodierte Zeichenfolge, die sowohl den Benutzernamen als auch das Kennwort enthält, denen jeweils ein NULL-Byte vorangestellt ist. Führen Sie diesen Befehl aus, um diese Zeichenfolge unter Verwendung der base64-Binärdatei zu erzeugen:
AHVzZXJuYW1lAHBhc3N3b3Jk
Beachten Sie, dass bei Sendgrid der Benutzername apikey und das Passwort der API-Schlüssel ist, den Sie generiert haben (wie in der Dokumentation beschrieben).
Nun können Sie diese base64-kodierte Zeichenfolge an den AUTH-Befehl in Ihrer Openssl- oder Telnet-Sitzung übergeben:
AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk
Das Ergebnis sollte sein:
LOGIN verwenden
Der LOGIN-Mechanismus erwartet ebenfalls einen base64-kodierten Benutzernamen und ein Passwort, allerdings separat. Erzeugen Sie zunächst die base64-kodierten Zeichenketten:
und authentifizieren Sie sich beim SMTP-Server:
Sie werden zuerst nach dem Benutzernamen und dann nach dem Passwort gefragt. Die gesamte Konversation wird so aussehen:
Senden Sie eine E-Mail
Jetzt geht es ans Eingemachte! Wir brauchen mindestens diese Angaben, um eine E-Mail versenden zu können:*
- Der Empfänger (RCPT TO)
- und den Nachrichtentext (DATA)
Sie müssen immer mit dem Befehl MAIL FROM beginnen, da dies dem SMTP-Server mitteilt, dass eine neue Mail-Transaktion gestartet wird.
Danach folgen die Adresse des Empfängers und schließlich der Betreff und der Text der Nachricht. Sowohl die Betreffzeile als auch der Nachrichtentext werden über den DATA-Befehl übergeben. Ich empfehle auch, den From: Header immer wieder in den DATA-Befehl aufzunehmen.
Sobald wir bereit sind, unsere Nachricht zu senden, beenden wir sie mit einem einzelnen Punkt (.). So sieht das aus, wenn Sie alles zusammensetzen:
MAIL FROM: from@domain.com
250 Absenderadresse akzeptiert
rcpt an: john@doe.com
250 Empfängeradresse akzeptiert
DATEN
354 Fortfahren
Von: from@domain.com
Betreff: Testnachricht!
Hallo,
Dies ist eine Testmeldung!
Das Beste,
Steven
.
250 Ok: in der Warteschlange als bazLUK4DEBqH25dH6iZuNg
Sie sollten am Ende eine Bestätigung (250 Ok) erhalten, dass die Nachricht angenommen wurde.
Hinweis: Wenn Sie die Verbindung mit openssl statt mit telnet hergestellt haben, müssen Sie darauf achten, dass Sie den Befehl rcpt to in Kleinbuchstaben eingeben. Wenn Sie in der Client-Sitzung R drücken, wird openssl angewiesen, die TLS-Verbindung neu auszuhandeln.
Geben Sie QUIT ein, um die Sitzung zu beenden.
Quelle: https://www.stevenrombauts.be/2018/12/test-smtp-with-telnet-or-openssl/