Smtp Zugriff ueber Telnet und s_client

Manchmal ist es bei der Fehlersuche hilfreich mit einem smtp Server direkt zu kommunizieren.

In alter Zeit erfolgte das Versenden von Mails noch unverschluesselt und ohne weitere Benutzername/Passwort Abfrage ueber Port 25 des Mailservers.

$ telnet mein.mailserver.de 25

danach konnte die Nachricht abgesetzt werden. (Format siehe unten) In juengerer Zeit begann man dann nach Benutzernamen/Passwort zu Fragen beim unverschluesselten Login

login name geHeim
....

Heutzutage lassen die meisten Anbieter nur noch verschluesselte Kommunikation zu. Dabei muss man unterscheiden zwischen verschluesselter Kommunikation (telnet ist unverschluesselt) und der Verschluesselung von Benutzername/Passwort. Bei den Verschluesselungsverfahren sind die SASL Authentifizierungsmethoden verbreitet.Da waeren:
login
plain
cram-MD5
digest-MD5

Bei den Verfahren login und plain werden Benutzername und Password als base64 kodiert uebertragen. Da das jeder wieder in klartext umwandeln kann ist das genauso unsicher wie eine unverschluesselte Uebertragung. Bei cram-MD5 und digest-MD5 werden die Benutzerdaten extra verschluesselt.

auth plain

Passwort und Benutzernamen werden zusammen in einen base64 String umgewandelt.
der Login wuerde dann wie folgt erfolgen:

auth plain DeinEigenerBase64String=
.....

Die Erzeugung des Strings fuer auth plain base64 ist mit Perl moeglich, Passwort und Benutzernamen werden zusammen in base64 umgewandelt:

perl -e 'use MIME::Base64; print encode_base64(join "\0", qw"benutzername benutzername passwort");'

Verschluesselter Verbindungsaufbau mit openssl s_client ueber den Port 587.

openssl s_client -connect mail.gmx.de:587 -starttls smtp -crlf

Authentifizierung und Absenden einer Mail, die Zeilen die mit $ beginnen sind die Antworten des Servers:

ehlo localhost


auth plain einbase64strin==

$ 235 Authentication succeeded

mail from: <eineadress@gmx.de>
$ 250 Requested mail action okay, completed
rcpt to: <eineadresse@gmx.de>
$ 250 OK
data
$ 354 Start mail input; end with .

From: me <email@email.de>
To: noone <email@email.de>
Subject: test 1

Ein beliebiger Text
.


$ 250 ok????

quit

Auth Login

Hierbei werden Benutzername und Passwort als base64 Kodierte Strings auf getrennten Zeilen uebertragen. die beiden base64 Strings werden mit Perl wie folgt erzeugt:

perl -e 'use MIME::Base64; print encode_base64(q"benutzername");'
perl -e 'use MIME::Base64; print encode_base64(q"passwort");'

Verschluesselter Verbindungsaufbau mit openssl s_client ueber den Port 587

openssl s_client -connect mail.gmx.de:587 -starttls smtp -crlf

Authentifizierung und Absenden einer Mail, die Zeilen die mit $ beginnen sind die Antworten des Servers:

ehlo localhost

auth login
$ 334 vnvn
benutzernamenalsbase64==
$ 334 ugffgflgöfg
bnutzerpasswortalsbase64==
$ 235 Authentication susseeded

mail from: <eineadresse@gmx.de>
$250 Requested Mail Action okay, Completed
rcpt to: <eineadresse@gmx.de>
$ 250 ok

data
$ 354 Start mail input; end with .
From: me <email@email.de>
To: noone <email@email.de>
Subject: test 1

Ein beliebiger Text
.

$ 250 Requested Mail action okay, completetd: id=93489384938??
quit
$ 221 gmx.com Service Closing transmission