PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for the ‘SMTP Befehle’ tag

Das SMTP Protokoll im Detail betrachtet

with 3 comments

Vor einem Jahr habe ich bereits das IMAP-Protokoll näher betrachtet, nun soll das SMTP Protokoll folgen. Jeder versendet und empfängt E-Mails, und viele von euch werden auch eigene Mailserver betreiben, es kann also nicht schaden das Protokoll näher zu kennen. SMTP steht für Simple Mail Transport Protocol, und genau das ist es auch: Simple. Mit einer Hand voll Befehlen kann man E-Mails auf den Weg bringen. SMTP wird von Mailservern gesprochen die E-Mails empfangen oder an andere Mailserver weitergeben, zur E-Mail-Abholung durch einen Client wird IMAP oder POP3 genutzt.

Nehmen wir erstmal den einfachsten Fall: Wir möchten eine E-Mail an meine E-Mail Adresse schicken. Dazu müssen wir zuerst herausfinden welcher Server für diese E-Mail-Adresse zuständig ist. Wir befragen den DNS-Server nach dem sogenannten MX-Eintrag (Mail Exchange) und erhalten den oder die Server, an die wir uns wenden müssen:

dig -t MX phpgangsta.de +short
10 mail.phpgangsta.de.

Hier könnten auch mehrere Ergebnisse erscheinen wenn ich mehrere Mailserver betreiben würde. Wir schauen also als nächstes, wer hinter mail.phpgangsta.de steckt:

dig mail.phpgangsta.de +short
85.214.28.26

In diesem Fall ist es mein Server mit der IP 85.214.28.26, wir müssen unsere E-Mail also dort abgeben. Der SMTP Port ist TCP 25, wohin wir uns ganz einfach mittels Telnet verbinden können:

telnet 85.214.28.26 25
Trying 85.214.28.26...
Connected to 85.214.28.26.
Escape character is '^]'.
220 h1440682.stratoserver.net ESMTP Postfix (Debian/GNU)

Der Server begrüßt uns mit seinem Namen und verrät auch gleichzeitig, dass er nicht nur SMTP spricht, sondern auch Extended SMTP (ESMTP). Mittlerweile sollten alle dieses neue Protokoll unterstützen, das 1995 eingeführt wurde um spezielle Fähigkeiten (Extensions) hinzuzufügen wie beispielsweise Authentifizierung. Vorher gab es die nicht, daran hatte wohl niemand gedacht früher *tzz*. Aber auch TLS ist erst mit ESMTP möglich, heutzutage gibt es auch wahrscheinlich keine Server mehr, die kein ESMTP anbieten.

Da der Server auch TLS unterstützt können wir uns auch verschlüsselt verbinden, indem wir erst eine normale Verbindung (wie oben) aufbauen und dann direkt mit dem STARTTLS Befehl in den verschlüsselten Modus wechseln. Da man das in Telnet schlecht eintippen kann nutzen wir den openssl-Client, der genau dies macht:

Weiterlesen »

Written by Michael Kliewe

August 8th, 2011 at 9:38 am