In Linuxmagazine kon je eerder lezen hoe je een mailserver installeert en problemen met een SMTP-server oplost. Maar wat als een IMAP-server om één of andere reden niet werkt zoals verwacht? Dan gebruik je toch gewoon telnet om uit te zoeken wat er misloopt!
Net zoals SMTP is ook IMAP een relatief eenvoudig protocol met een beperkt aantal commando’s in plain text. Het is dus niet erg moeilijk om een IMAP-sessie stap voor stap op te zetten via telnet. Om te beginnen moet je natuurlijk verbinding maken met de IMAP-server. Laat de IMAP-server plaintext-verbindingen toe, zoals in het voorbeeld uit de workshop? Dan volstaat het volgende commando om een verbinding te openen.

telnet <hostname> 143

Bedenk wel dat alle communicatie (inclusief eventuele wachtwoorden!) in clear text over het netwerk gaat. Deze methode gebruik je dus bij voorkeur enkel vanaf de IMAP-server zelf (ssh eerst naar de IMAP-server en telnet daar naar localhost).

Het is natuurlijk beter om je IMAP-server met SSL-encryptie te beveiligen. In het volgende nummer lees je hoe dat in zijn werk gaat. We geven al wel mee hoe je met zo’n beveiligde IMAP-server verbindt. Dat kan op twee manieren, afhankelijk van de configuratie van de server:
– via STARTTLS, op poort 143:  *** LISTING *** openssl s_client -connect <hostname>:143 -starttls imap *** EINDE LISTING ***
– via IMAPS, op poort 993: *** LISTING *** openssl s_client -connect <hostname>:993 *** EINDE LISTING ***

Inloggen
Na het openen van de verbinding geeft de server aan welke features hij ondersteunt. Zo weet de client bijvoorbeeld op welke manier hij mag authenticeren en of de server STARTTLS ondersteunt. Nu is het jouw beurt om commando’s in te voeren. Vergeet niet om elk commando te beginnen met een tekst naar keuze, bijvoorbeeld een volgnummer. Het antwoord van de IMAP-server begint dan met dezelfde tekst, gevolgd door OK (als alles goed gaat), NO (in geval van een fout) of BAD (als je een syntaxfout gemaakt hebt).

Vervolgens log je in met de credentials van een IMAP-gebruiker (dit voorbeeld werkt enkel indien de IMAP-server AUTH=LOGIN aangaf bij de ondersteunde features):

01 LOGIN <username> <password>

Lukt dit, dan krijg je een veel langere lijst van ondersteunde features te zien. Nu wil je natuurlijk weten welke mappen de mailbox zoal bevat:

02 LIST “” “*”
* LIST (\HasChildren) “/” “INBOX”
* LIST (\HasNoChildren) “/” “INBOX/Drafts”

02 OK List completed.

… er of er ongelezen e-mails zijn in een bepaalde map:

03 STATUS “INBOX” (MESSAGES UNSEEN)
* STATUS “INBOX” (MESSAGES 2130 UNSEEN 2)
03 OK Status completed.

In dit geval zijn er twee ongelezen mails in de inbox. Om die te bekijken, openen we de inbox en zoeken we de message ID’s van de ongelezen berichten:

04 SELECT “INBOX”

04 OK [READ-WRITE] Select completed.
05 SEARCH UNSEEN
* SEARCH 2126 2130
05 OK Search completed (0.000 secs).

Er bestaan overigens nog heel wat andere criteria om berichten te zoeken, zoals FROM, TO, SUBJECT, BODY, BEFORE, SINCE, etcetera.

Met dit message ID kunnen we de headers van de e-mail ophalen (gebruik BODY.PEEK in plaats van BODY als je niet wilt dat het bericht als gelezen wordt gemarkeerd):

06 FETCH 2126 BODY[HEADER]

…en daarna de mail zelf:

07 FETCH 2126 BODY[TEXT]

Is er een maximumgrootte ingesteld voor jouw mailbox? Onderstaand commando toont je de huidige en maximaal toegelaten grootte in kilobytes:

08 GETQUOTAROOT “”
* QUOTAROOT “” “user”
* QUOTA “user” (STORAGE 842637 972800)
08 OK Getquotaroot completed.

In dit voorbeeld heeft de gebruiker ongeveer 820MB van de toegelaten 950MB in gebruik.

Uiteraard is dit niet de meest gebruiksvriendelijke methode om je e-mails te lezen of quota te controleren. Maar het kan nooit kwaad om een aantal IMAP-commando’s te kennen in geval van problemen. Lukt het je niet om verbinding te maken of vertoont je e-mailclient raar gedrag, dan verschaft een telnet-sessie je vaak nuttige informatie!