Home   Profil   Fun
#56 Linux  05.04.2009

Telnet ESMTP-Session mit SMTP AUTH


Hier findest du eine Beispielsitzung einer Kommunikation mit einem Postfix-Mailserver mit Hilfe der Shell und Telnet. Der Mailserver verwendet ESMTP (Extended SMTP). In diesem Beispiel unterstützt der Server die Authentifizierungsmethoden PLAIN und LOGIN, wir werden LOGIN verwenden.

Der Mailserver erwartet den Benutzernamen und das Passwort base64-encoded (dies ist keine Verschlüsselung!). Daher schreiben wir als erstes ein kleines Perl-Skript, welches das Encoding für uns erledigt. Ich nenne es base64encoder.pl:
#!/usr/bin/perl

use MIME::Base64;

# encode parameter 1
$encoded_usr = encode_base64($ARGV[0]);
# encode parameter 2
$encoded_pwd = encode_base64($ARGV[1]);

#$decoded = decode_base64($encoded);

print $encoded_usr;
print $encoded_pwd;

Das Programm benötigt zwei Parameter, den Benutzernamen und das Passwort.
./base64encoder.pl username password
dXNlcm5hbWU=
cGFzc3dvcmQ=

Jetzt, da wir die Zugangsdaten encoded vorliegen haben kann mit der Sitzung begonnen werden. Falls telnet nicht verfügbar ist kann man auch nc nehmen: "nc mailserver.com 25". nc ist im Paket netcat enthalten.
# telnet mymailserver.com 25
Trying 80.100.11.133...
Connected to mymailserver.com.
Escape character is '^]'.
220 mymailserver.com ESMTP Postfix
ehlo h1.home.net
250-mymailserver.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250 8BITMIME
auth login dXNlcm5hbWU=
334 UGFzc3dvcmQ6
cGFzc3dvcmQ=
235 Authentication successful
mail from:<norbert@acodedb.com>
250 Ok
rcpt to:<info@acodedb.com>
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
from: name_of_sender <norbert@acodedb.com>
to: name_of_recipient <info@acodedb.com>

subject:test
Enter the actual mailtext here...blabla. 
.
250 Ok: queued as 308EBE0575E7
quit
221 Bye
Connection closed by foreign host.

Erklärungen zur Kommunikation:
Alle Zeilen zwischen "Escape character is '^]'." und "Connection closed by foreign host.", die mit Ziffern beginnen sind Antworten vom Mailserver. Die anderen sind die Kommandos, die vom Client abgesetzt wurden.

ehlo h1.home.net
Dies sagt dem Server, dass der Client in der Lage ist das ESMTP-Protokoll zu verwenden. Daraufhin antwortet der Server mit einer Liste von verfügbaren Erweiterungen, die auch die verfügbaren Login-Methoden beinhalteten. In diesem Fall PLAIN und LOGIN.

auth login dXNlcm5hbWU=
Dies bedeutet, ich authentifiziere mich mit der Methode LOGIN und dem Benutzernamen base64-encoded. Der Server antwortet mit 'UGFzc3dvcmQ6', dies ist ebenfalls base64-encoded. Wandelt man es zurück erhält man den String 'Password:'. Der Server fragt also nach dem Passwort. Daher geben wir es wiederum base64-encoded ein: cGFzc3dvcmQ=

354 End data with <CR><LF>.<CR><LF>
Der Mailserver sagt uns schließlich, dass wir die Email senden können, in dem wir eine Zeile eingeben die nur den Punkt '.' enhält.