Hi MWN’ers

IMAP (Internet Message Access Protocol) adalah protokol standar untuk mengakses/mengambil e-mail dari server. IMAP memungkinkan pengguna memilih pesan e-mail yang akan ia ambil, membuat folder di server, mencari pesan e-mail tertentu, bahkan menghapus pesan e-mail yang ada.

Kemampuan ini jauh lebih baik daripada POP3 (Post Office Protocol versi 3) yang hanya memperbolehkan kita mengambil/download semua pesan yang ada tanpa kecuali.

Untuk berbicara langsung dengan server IMAP, kita dapat menggunakan program telnet dan konek ke port IMAP (defaultnya 143, tapi dapat berbeda).

$ telnet HOSTNAME_ATAU_IP 143 

Sekilas protokol IMAP

Setiap baris request dari klien perlu diprefiks (diawali) dengan sebuah string penanda. Pada contoh-contoh di artikel ini digunakan a001.

Contoh

Login:

$ telnet mail.host.com 143
Trying 1.2.3.4... Connected to mail.host.com (di isi dengan nama domain anda) Escape character is '^]'. * OK [CAPABILITY IMAP4REV1 LITERAL+ SASL-IR LOGIN-REFERRALS AUTH=LOGIN] mail.host.com IMAP4rev1 2004.350 at Fri, 16 Mar 2007 13:51:21 -0500 (CDT)
a01 LOGIN someuser somepass
RESPONSE: a001 OK User logged in

Mengetahui capability IMAP service:

a001 CAPABILITY
* CAPABILITY IMAP4REV1 LITERAL+ IDLE NAMESPACE MAILBOX-REFERRALS BINARY UNSELECT SCAN SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND SASL-IR LOGIN-REFERRALS AUTH=LOGIN a001 OK CAPABILITY completed

Logout:

a001 LOGOUT
* BYE mail.host.com IMAP4rev1 server terminating connection a002 OK LOGOUT completed Connection closed by foreign host.

Melihat daftar mailbox yang ada (pada contoh, semua anak Inbox):

a001 LIST "Inbox" "*"
* LIST (\HasNoChildren) "." "INBOX.omail.log.old" * LIST (\HasChildren) "." "INBOX.omail.log" * LIST (\HasNoChildren) "." "INBOX.Trash" * LIST (\HasNoChildren) "." "INBOX.Spam" * LIST (\HasNoChildren) "." "INBOX.Sent" * LIST (\HasNoChildren) "." "INBOX.Drafts" * LIST (\Noselect \HasChildren) "." "INBOX.omail" a001 OK LIST completed

Men-select sebuah mailbox (pada contoh, bernama INBOX):

a001 SELECT INBOX
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen) * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)] * 1242 EXISTS * 0 RECENT * OK [UIDVALIDITY 1062186210] * OK [UIDNEXT 1246] a03 OK [READ-WRITE] Completed

Mendaftar semua message yang ada pada sebuah mailbox yang sedang di-select:

a001 FETCH 1:* FLAGS
* 1 FETCH (FLAGS (\Seen)) * 2 FETCH (FLAGS (\Seen)) * 3 FETCH (FLAGS (\Seen)) * 4 FETCH (FLAGS (\Seen)) * 5 FETCH (FLAGS (\Seen)) * 6 FETCH (FLAGS (\Seen \Answered)) ... a001 OK FETCH completed

Mengambil header-header sebuah message (pada contoh, urutan pertama dan mengambil full headers).

a001 FETCH 1 full
* 1 FETCH (FLAGS (\Seen) INTERNALDATE "15-Mar-2000 13:10:14 -0500" RFC822.SIZE 1 553 ENVELOPE ("Wed, 15 Mar 2007 13:10:11 -0600" "Perl Stuff" (("Rusty Nejdl" NIL "rnejdl" "verio.net")) (("Rusty Nejdl" NIL "rnejdl" "verio.net")) (("Rusty Nejd l" NIL "rnejdl" "verio.net")) ((NIL NIL "rnejdl" "verio.net")) ((NIL NIL "ttodd" "verio.net")) NIL NIL "<20000315131011.A5381@tethys.ringofsaturn.com>") BODY (" TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "7BIT" 359 9)) a001 OK FETCH completed

Mengambil bodi message:

a001 FETCH 1 body

Set quota:

a001 SETQUOTA "" (STORAGE 512)

Get quota:

a001 GETQUOTA ""
* QUOTA "" (STORAGE 10 512) a001 OK Getquota completed

Get quota root:

a001 GETQUOTAROOT "Inbox"

Catatan untuk perintah - Perintah di atas, setelah anda login di server dan untuk layanan server sendiri/private, baik VPS, Colo/Dedicated server.