Mail im Internet - IMAP4-Telnet

Weitere Seiten zum Thema:

Analog zu POP3 kann ein Client auch über das viel leistungsfähigere Protokoll IMAP4 die Mails lesen. Auch IMAP4 setzt auf TCP/IP auf aber nutzt den Port 143 statt 110 als Default. Eine Verbindung kann wieder mit "TELNET IMAP4server 143" aufgebaut werden

Beachten Sie, dass bei der Nutzung ohne SSL es sehr einfach ist, das Kennwort und die übertragenen Nachrichten mitzulauschen. Der Versand von Nachrichten erfolgt per SMTP

IMAP4 Grundlagen

Das Protokoll IMAP4 besteht analog zu POP3 im wesentlichen aus per Text übergebenen Steuerbefehlen. Ein einfaches TELNET-Programm ist daher ausreichend, um die Funktion zu testen. Anders als POP3 muss aber zu jeder Zeile eine Art Transaktionsnummer mitgegeben werden. Diese muss aber nicht aufsteigend sein.

IMAP4 unterscheidet verschiedene Zustände Über entsprechende Befehle und Angabe von Zugangsdaten ist ein Wechsel möglich. In den verschiedenen Zuständen sind immer nur eine bestimmte Gruppe an Befehlen nutzbar.

  • Nicht angemeldet (non-authenticated)
    Sie haben eine Verbindung per TELNET aufgebaut aber noch keine Benutzerdaten übermittelt. Der nächste Schritt ist daher meist ein LOGIN
  • angemeldet (authenticated)
    Sie wurden angemeldet. für die weiteren Aktionen müssen Sie jedoch erst ein Ziel auswählen. Im Gegensatz zu POP3, wo immer der Posteingang ausgewählt ist, können Sie bei IMAP4 ja verschiedene Ordner und Postfächer erreichen. Mit dem Befehl "SELECT INBOX" wird das Postfach des aktiven Benutzers ausgewählt.
  • ausgewählt (selected)
    Erst wenn Sie quasi ihr Ziel ausgewählt haben, können Sie nun die Inhalte Lesen, löschen, verschieben etc.

Am besten schauen wir und einfach mal die Befehle ein, um die erste Nachricht in einem Postfach zu lesen:

Beispielverbindung per IMAP4

Zuerst bauen Sie eine Verbindung per TELNET zum IMAP4 Server auf den Port 143 auf. Der Server meldet sich und sie melden Sich an. Achtung: Das "a001" und hochzählend muss mit eingegeben werden. Natürlich können Sie ihre eigenen Sequenznummern verwenden.

S: * * OK Der Microsoft Exchange Server 2003 IMAP4rev1-Server, Version 6.5.7226.0
C: a001 login username kennwort
S: a001 OK LOGIN completed

Nun ist es an der Zeit, den Posteingang auszuwählen:

C: a002 select inbox
S: * 292 EXISTS
S: * 5 RECENT
S: * FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)
S: * OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent flags
S: * OK [UNSEEN 13] Is the first unseen message
S: * OK [UIDVALIDITY 273] uIDVALIDITY value
S: a002 OK [READ-WRITE] SELECT completed

Sie bekommen jede Menge Informationen. So gibt es 292 Mails im Posteingang. Die erste ungelesene Nachricht ist das Objekt 13. Achtung: die Nummerierung ist nicht zwingend lückenlos.

Ich möchte ihnen natürlich nicht alle Mails anzeigen lassen. Daher hole ich die Mail Nummer 274

C: a003 fetch 274 body[header]
S: Received: from test ([192.168.100.71]) by gate.msxfaq.local with Microsoft SMTPSVC(6.0.3790.1830);
S: Mon, 10 Oct 2005 13:56:21 +0200
S: Subject:test
S: From: test@msxfaq.local
S: Return-Path: test@msxfaq.local
S: Message-ID: <NAWSV001ptgFrYILoyg00000025@gate.msxfaq.local>
S: X-OriginalArrivalTime: 10 Oct 2005 11:56:23.0691 (UTC) FILETIME=[A2E6BDB0:01C5CD91]
S: Date: 10 Oct 2005 13:56:23 +0200
S:
S: )
S: a003 OK FETCH completed.

Der Server sendet mir durch die Angabe von "body[header]" die Mail in einer lesbaren Form. Ich kann natürlich auch eine andere Formatierung wählen. (Siehe RFC)

Nun gehe ich davon aus, dass ich die Mail gelesen habe und möchte diese löschen.

C: a004 store 274+flags \deleted
S: * 274 FETCH (FLAGS (\Seen \Deleted))
S: a004 OK +FLAGS completed

Das soll es fürs erste gewesen sein und wir melden uns ab.

C: a005 logout
S: * BYE IMAP4rev1 server terminating connection
S: a005 OK LOGOUT completed

Im Gegensatz zum sehr viel einfacheren POP3 bietet IMAP4 natürlich eine umfangreichere Menge an Funktionen, um Nachrichten auf dem Server zu bearbeiten.

Ein "LIST"-Befehl,. wie bei POP3 gibt es hingegen nicht. Auch diese Funktion ist im Befehl "FETCH" eingebaut. So liefert mir folgender Befehl den Header aller Mails der Nummer 1 bis 300. Die höchste Nummer bekomme ich ja beim SELECT INBOX schon mit.

C: a002 fetch 1:279 ALL
S: * 279 FETCH (FLAGS () INTERNALDATE "10-Oct-2005 15:40:42 +0200"
S: RFC822.SIZE 871 ENVELOPE ("Mon, 10 Oct 2005 15:42:00 +0200"
S: "test3" (("Carius, Frank" NIL "frank.carius" "msxfaq.local"))
S: (("Carius, Frank" NIL "frank.carius" "msxfaq.local"))(("Carius,
S: Frank" NIL "frank.carius" "msxfaq.local")) (("Carius, Frank" NIL
S: "frank.carius" "msxfaq.local")) NIL NIL NIL
S: "<2C4F30BA135431479AA1DAD5BA9B08F499D0E4@nawsv001.msxfaq.local>"))
S: * 280 FETCH (FLAGS () INTERNALDATE "10-Oct-2005 15:40:42 +0200"
S: RFC822.SIZE 1126 ENVELOPE ("Mon, 10 Oct 2005 15:41:46 +0200"
S: "Test1" (("Carius, Frank" NIL "frank.carius" "msxfaq.local"))
S: (("Carius, Frank" NIL "frank.carius" "msxfaq.local"))(("Carius,
S: Frank" NIL "frank.carius" "msxfaq.local")) (("Carius, Frank" NIL
S: "frank.carius" "msxfaq.local")) NIL NIL NIL
S: "<2C4F30BA135431479AA1DAD5BA9B08F499D0E5@nawsv001.msxfaq.local>"))
S: * 281 FETCH (FLAGS () INTERNALDATE "10-Oct-2005 15:40:43 +0200"
S: RFC822.SIZE 417 ENVELOPE ("Mon, 10 Oct 2005 15:40:43 +0200" "=?
S:iso-8859-1?Q?=DCbermittelt=3Atest3?=" (("Systemadministrator"
S: NIL "postmaster" "msxfaq.local")) (("Systemadministrator" NIL
S: "postmaster" "msxfaq.local")) (("Systemadministrator" NIL
S: "postmaster" "msxfaq.local")) (("Carius, Frank" NIL "frank.carius"
S: "msxfaq.local")) NIL NIL NIL
S:"<WmFI9zZQy00000026@gate.msxfaq.local>"))
S: a002 OK FETCH completed.

Natürlich ist diese Format eher "Computerlesbar" aber ich habe z.B.: die Betreffzeilen mal farblich markiert. Die Datensätze sind durch einen "*" eingeleitet.

Weitere Links