Mengenal POP3(2)
Widjil Widodo
Dosen: Onno W. Purbo

	Tentu kita sering bertanya, sebenarnya proses apa saja yang terjadi saat kita ‘berbicara’ dengan sebuah  server POP3. Pada tulisan ini akan dibahas bagaimana kita dapat ‘berbicara’ dengan  server POP3 dengan menguraikan tahap-tahap yang terjadi pada hubungan antara POP3 server (pada contoh dibawah disingkat dengan  huruf S) dengan POP client (disingkat dengan huruf C). Selain itu juga akan diberikan beberapa contoh penggunaan perintah POP3 oleh client untuk mengakses mail-nya yang masih ada di server (mail milik client  yang  masih berada di server   pada tulisan ini akan disebut sebagai maildrop). 
	Seperti sudah dibahas pada tulisan sebelumnya, pada saat kita berkomunikasi dengan server POP3 maka kita akan melalui tiga tahap yaitu tahap AUTHORIZATION, TRANSACTION dan UPDATE. Dibawah ini akan diuraikan proses-proses yang terjadi, perintah yang digunakan oleh client dan jawaban yang diberikan oleh server pada masing-masing tahap tersebut.

Tahap AUTHORIZATION

	Pada tahap ini, sekali hubungan TCP telah dibuka oleh sebuah POP3 client, maka POP3 server akan memberikan satu baris greeting (kata pembuka).  Contoh :
      S:  +OK POP3 server ready
Sesi POP3 sekarang berada pada tahap AUTHORIZATION. Pada tahap AUTORIZATION ini, client harus memperkenalkan dan membuktikan dirinya pada POP3 server. Dua mekanisme yang mungkin pada proses ini  adalah dengan menggunakan kombinasi perintah USER dan PASS dan menggunakan perintah APOP.
	Untuk pembuktian menggunakan kombinasi  perintah USER dan PASS, client pertama kali harus memberikan perintah USER. Jika POP3  server menjawab dengan indikator status positif  (“+OK”), maka client dapat memberikan perintah PASS untuk melengkapi proses pembuktian ini atau perintah QUIT untuk  mengakhiri  sesi POP3. Jika POP3 server menjawab dengan indikator status negatif (“-ERR”) pada perintah USER, maka client dapat memberikan sebuah pembuktian baru (dengan nama user yang baru) atau memberikan perintah QUIT.  Ketika client memberikan  perintah PASS, POP3 server menggunakan pasangan argument dari perintah USER dan PASS untuk menentukan apakah client dapat diberikan akses pada mail yang semestinya.  
	Setelah POP3 server  menentukan bahwa client tersebut memang dapat diberikan akses pada mail yang semestinya, POP3 server kemudian akan mengunci akses khusus ke mail  tersebut, yang diperlukan untuk mencegah pengubahan dan penghapusan mail sebelum sesi memasuki tahap UPDATE.  Apabila proses  penguncian telah berhasil, POP3 server akan menjawab dengan indikator status positif dan sekarang  sesi memasuki tahap TRANSACTION  tanpa ada mail yang diberi tanda  akan dihapus. Jika maildrop tersebut tidak dapat dibuka karena beberapa alasan (sebagai contoh, client ditolak untuk mengakses maildrop yang semestinya, tidak dapat melakukan proses penguncian, atau maildrop tidak dapat diuraikan), POP3 server akan menjawab dengan indikator status negatif.  Jika proses penguncian berhasil tapi POP3 server bermaksud untuk menjawab dengan indikator status negatif, POP3 server harus melepaskan penguncian   terlebih  dahulu  untuk   menolak  perintah. Setelah  menjawab  dengan sebuah  indikator  status negatif,  server dapat   menutup  hubungan. Jika  server tidak  menutup hubungan, client dapat memberikan perintah  USER dan PASS yang baru dan memulai lagi hubungan dengan server atau memberikan  perintah QUIT.
Setelah server POP3  telah membuka maildrop, server kemudian akan memberi nomor  pada setiap mail, dan mencatat ukuran tiap mail dalam octets (bytes). Mail pertama  dalam maildrop akan diberi nomor mail "1", yang kedua diberi nomor mail "2", dan seterusnya, sehingga mail ke-n akan diberi nomor mail "n". Dalam perintah dan jawaban POP3, semua nomor mail dan ukuran mail di tulis dengan bilangan desimal (basis 10).
	Dibawah ini  akan dibahas mengenai  perintah-perintah POP3 yang dipakai pada tahap AUTHORIZATION  :

•	USER [nama_user]
 		Perintah ini hanya bisa digunakan pada tahap AUTHORIZATION. Argumen [nama user] harus diberikan untuk mengidentifikasi user.
Jawaban  server :
	+OK name is a valid mailbox
	-ERR never heard of mailbox name
Contoh :
	C: USER wandi
	S: +OK Password required for wandi 

•	PASS [password]
	Perintah ini juga hanya bisa digunakan  pada tahap AUTHORIZATION setelah pemberian perintah USER  berhasil . Argumen [password] diperlukan oleh server untuk membuktikan kebenaran identitas user. Karena perintah PASS hanya memiliki sebuah argumen, maka server membolehkan karakter spasi pada password dan menganggapnya sebagai bagian dari password tersebut.  
Jawaban  server  :
	+OK maildrop locked and ready
	-ERR invalid password
	-ERR unable to lock maildrop
Contoh :
	C: USER wandi
	S: +OK Password required for wandi 
	C: PASS rahasia
	S: +OK wandi has 9 messages (1200 octets)
	… 
 	C: USER wandi
	S: +OK Password required for wandi 
	C: PASS rahasias
	S: -ERR Password supplied for "wandi" is incorrect.

•	QUIT
   Perintah QUIT digunakan untuk mengakhiri sesi hubungan dengan POP3 server dan dapat dipakai pada tahap AUTHORIZATION dan tahap UPDATE. Perintah ini tidak membutuhkan argumen. Jika perintah QUIT ini digunakan pada tahap AUTHORIZATION  maka hubungan akan berakhir tapi tidak memasuki tahap UPDATE.
Jawaban  server :
	+OK	
Contoh :
	C: QUIT
	S: +OK POP server students.itb.ac.id  signing off 

Tahap TRANSACTION

Pada  saat client  telah berhasil membuktikan kebenaran identitasnya pada POP3 server dan POP3 server telah mengunci akses khusus dan membuka  maildrop milik client tersebut, maka  sesi  hubungan  POP3  sekarang berada  pada tahap TRANSACTION. Pada tahap ini  client  dapat  memberikan  sebarang dari  perintah-perintah  POP3  dibawah  ini  secara berulang-ulang. Setelah  tiap-tiap  perintah  yang diberikan,  POP3 server akan memberikan jawaban,  sampai client memberikan  perintah  QUIT  dan  sesi memasuki  tahap UPDATE. Dibawah ini adalah  perintah-perintah yang dapat diberikan  pada tahap TRANSACTION :

•	STAT
  Perintah STAT yang merupakan singkatan dari Status, digunakan untuk menampilkan informasi mengenai maildrop yang kita miliki. Perintah  ini tidak memerlukan argumen dan hanya bisa digunakan pada tahap TRANSACTION . Satu baris jawaban yang diberikan oleh server yang berisi informasi tersebut biasa disebut sebagai drop listing. Jawaban positif yang diberikan server berisi  “+OK” dan diikuti oleh spasi, jumlah mail dalam maildrop , spasi, dan ukuran maildrop dalam bilangan oktal.
Jawaban  server :
	+OK {jumlah_mail besar_maildrop}
Contoh :
	C: STAT
	S: +OK 5 1200

•	LIST [nomor_mail]
    Perintah LIST digunakan untuk menampilkan informasi tentang salah satu atau semua mail yang berada di maildrop yang kita miliki. Perintah ini hanya dapat digunakan di tahap TRANSACTION. Argumen yang digunakan pada perintah ini  tidak harus diberikan.  Jika argumen (yang berisi nomor mail) diberikan maka  POP3 server akan memberikan satu baris jawaban positif yang berisi tentang informasi mail tersebut. Jika argumen tidak diberikan maka server akan memberikan jawaban positif  dan diikuti oleh baris-baris informasi semua mail yang ada di maildrop.  Informasi yang diberikan ini biasa disebut scan listing, dan  terdiri dari  nomor mailnya, diikuti spasi dan ukuran mail tersebut dalam bilangan oktal. Perlu diingat bahwa mail-mail yang sudah diberi tanda akan dihapus, tidak akan ditampilkan.
Jawaban  server :
	+OK {jumlah_mail besar_maildrop}
	-ERR no such message
Contoh :
	C: LIST
	S: +OK 5 messages  (1200 octets)
	S: 1 250
	S: 2 190
	S: 3 280
	S: 4 220
	S: 5 260
	S: .
	…
	C:  LIST 2
	S: +OK 2 190
	C: LIST 10
	S: +ERR no such message, only 5 messages in maildrop.

•	RETR [nomor_mail]
Perintah RETR yang merupakan singkatan dari Retrieve, digunakan untuk mengambil mail dari server. Perintah ini hanya bisa digunakan pada tahap TRANSACTION. Argumen [nomor mail] dibutuhkan untuk memberitahu server mail yang akan diambil. Jika server memberikan jawaban positif, jawaban yang diberikan terdiri dari beberapa baris. Setelah permulaan +OK, POP3 server akan mengirimkan mail sesuai dengan nomor mail yang diminta.
Jawaban  server :
	+OK {ukuran mail}
	-ERR no such message
Contoh :
	C: RETR 3
	S: +OK 280 octets
	S: {POP3 server mengirimkan seluruh isi mail disini}
	S:.	

•	DELE [nomor_mail]
  Perintah DELE yang meupakan singkatan dari Delete, digunakan untuk menghapus mail yang ada di server. Perintah ini hanya bisa digunakan pada tahap TRANSACTION. Argumen [nomor mail]  harus diberikan  untuk memberitahu server mail yang akan dihapus. Setelah memberi perintah DELE dan diikuti nomor mail yang hendak dihapus, sebenarnya server belum menghapus mail tersebut. Pada saat itu server hanya memberi tanda pada mail tersebut untuk dihapus setelah sesi memasuki tahap UPDATE. Jadi setelah sesi memasuki tahap  UPDATE (yaitu setelah perintah QUIT diberikan),  barulah server menghapus mail yang sudah diberi tanda tersebut. 
Jawaban  server :
	+OK message deleted
	-ERR no such message
 		Contoh :
	C: DELE  3
	S: +OK message 3 has been deleted
	C: DELE  4
	S: -ERR message 4 has already been deleted			 
 
•	RSET
Perintah RSET yang merupakan singkatan dari Reset, digunakan untuk membatalkan pemberian tanda pada semua mail yang sudah diberi tanda penghapusan oleh perintah DELE. Perintah ini hanya bisa digunakan pada tahap TRANSACTION dan tidak membutuhkan argumen [nomor mail] karena sekali perintah RSET diberikan maka secara otomatis semua perintah DELE yang pernah diberikan akan dibatalkan.
Jawaban  server :
	+OK
Contoh
	C: RSET
	S: +OK maildrop has 5 messages (1200 octets)

•	NOOP
Perintah NOOP yang merupakan singkatan  dari No Operation, digunakan untuk memberitahu server bahwa client tidak akan melakukan  sesuatu.. Perintah ini hanya dapat digunankan pada tahap TRANSACTION dan tidak memerlukan argumen. Server selalu memberi jawaban positif bila diberikan perintah ini.
Jawaban  server :
	+OK
Contoh :
	C: NOOP
	S: +OK

Tahap UPDATE

	Ketika client memberikan perintah QUIT dari tahap TRANSACTION, sesi hubungan POP3 memasuki tahap UPDATE.  Seperti telah di bahas sebelumnya, perbedaan perintah QUIT yang diberikan pada tahap AUTHORIZATION dan pada tahap UPDATE adalah jika pada tahap UPDATE  perintah QUIT akan mengakhiri hubungan dengan melalui tahap UPDATE, sedangkan jika diberikan pada tahap AUTHORIZATION perintah ini juga akan mengakhiri hubungan tapi tidak melalui tahap UPDATE. Jika hubugan diakhiri  dengan selain perintah QUIT, maka hubungan POP3 tersebut tidak akan melalui tahap UPDATE yang berarti tidak akan menghapus mail jika ada mail yang sudah diberi tanda penghapusan pada tahap TRANSACTION.  Pada tahap ini hanya ada satu perintah yang dapat digunakan yaitu perintah QUIT :

•	QUIT
	Perintah ini digunakan untuk mengakhiri sesi hubungan  dengan POP3 server. Setelah diberikan perintah QUIT pada tahap ini, server akan menghapus semua mail yang sudah diberi tanda penghapusan dari maildrop. Kemudian server akan melepaskan penguncian akses khusus ke maildrop tersebut dan memberitahukan status pada operasi ini. Setelah itu barulah hubungan TCP ditutup. 
Jawaban  server :
	+OK
Contoh :
	C: QUIT
	S: +OK POP server students.itb.ac.id  signing off 

Perintah  Tambahan  POP3

Perintah-perintah  POP3  yang  dibahas diatas  merupakan  perintah-perintah dasar yang  dilayani oleh  semua POP3  server dengan  implementasi  minimal. Selain perintah diatas  masih ada lagi  beberapa perintah  tambahan  yang mengizinkan  sebuah  POP3 client  untuk lebih  bebas  dalam penanganan mail miliknya pada saat  berhubungan dengan  POP3 server. Perintah  tambahan  tersebut antara  lain adalah APOP,  TOP dan UIDL. 
	
•	APOP  [nama_user  digest]
Biasanya, setiap sesi hubungan POP3 dimulai dengan  perintah USER dan PASS. Cara ini menyebabkan password  milik  user dikirim   secara transparan dalam jaringan komputer. Untuk user yang jarang menggunakan POP3 mungkin ini tidak terlalu berisiko. Akan tetapi untuk user yang  secara reguler menggunakan POP3 untuk mengambil mail baru, hal ini akan memperbesar risiko penyadapan password. Untuk mengatasi masalah ini dapat  digunakan metoda alternatif dengan memakai perintah  APOP. Perintah  ini  hanya dapat digunakan pada tahap AUTHORIZATION. Perintah APOP menyediakan perlindungan  untuk kedua pihak baik client yang melakukan proses pembuktian identitas maupun server yang menjawab proses pembuktian tersebut.  
POP3 server yang mengimplementasikan  perintah APOP akan menyediakan penunjuk waktu (time stamp) pada greeting (kata pembuka)pembukaan  sesi hubungan dengannya. Penunjuk waktu server menyesuaikan  sintaksisnya pada  'msg-id' [pada RFC 822], dan harus berbeda setiap kali POP3 server memberikan greeting. Sebagai contoh, sintaksis dari penunjuk waktu pada  sebuah POP server :
 	process-ID.clock@hostname  
dimana 'process-ID' adalah nilai desimal dari PID milik proses tersebut, 'clock' adalah nilai desimal dari sistem clock,  dan 'hostname' adalah nama host lengkap dengan domainnya tempat dimana server POP3 dijalankan.
Client POP3 mencatat penunjukan waktu tersebut, dan kemudian memberikan  perintah APOP.  Argumen  'nama_user' mempunyai semantik yang identik dengan argumen  'nama_user' pada  perintah USER. Argumen 'digest' didapat dengan menerapkan algoritma MD5  (RFC 1321) pada penunjuk waktu (termasuk tanda kurung siku) dan diikuti dengan shared secret. Shared secret ini adalah suatu  kelompok  karakter yang sifatnya rahasia dan hanya diketahui oleh  client dan server  POP3 miliknya.  Perhatian yang lebih harus diberikan untuk mencegah penyadapan rahasia tersebut, karena  dengan mengetahui informasi rahasia itu akan membolehkan siapa saja yang menyamar dengan nama_user milik kita untuk masuk ke dalam server. 
Ketika  menerima perintah APOP,  POP3 server akan menguji digest yang diberikan. Jika digest tersebut benar,  server akan memberikan jawaban positif, dan  sesi hubungan  POP3 memasuki tahap TRANSACTION. Sebaliknya, jika digest yang diberikan salah maka server akan memberikan jawaban negatif dan sesi hubungan tetap pada tahap AUTHORIZATION. Perlu diingat bahwa jumlah karakter shared secret  sebaiknya  banyak, sehingga  akan menyulitkan  upaya penyadapannya (sebaiknya lebih dari 8 karakter).
Jawaban  server :
+OK  maildrop locked and ready
-ERR permission denied
Contoh :
S: +OK QPOP (version 2.53) at students.itb.ac.id  starting.  <1896.697170952@students.itb.ac.id>
C: APOP wandi c4c9334bac560ecc979e58001b3e22fb
S: +OK maildrop has 5 message (1200 octets)
Pada contoh  ini, shared secret adalah  'tanstaaf. Jadi, algoritma MD5 diterapkan pada string :
<1896.697170952@students.itb.ac.id>tanstaaf
sehingga menghasilkan nilai digest :
	c4c9334bac560ecc979e58001b3e22fb

     
•	TOP [nomor_mail  jumlah_baris]
Perintah TOP digunakan untuk  menampilkan isi mail  sesuai dengan jumlah baris yang diminta. Perintah ini hanya boleh digunakan pada tahap TRANSACTION. Argumen [nomor_mail] diperlukan untuk memberitahu server mail  yang harus di tampilkan, demikian juga dengan argumen [jumlah_baris]. Jika nomor_mail  yang ditulis  tidak ada atau sudah dihapus, maka server akan memberikan jawaban negatif. Nilai yang diberikan pada jumlah_baris akan memberitahu server  berapa baris  teratas dari isi mail yang akan ditampilkan.
 Jika sebuah POP3 server   memberikan jawaban positif, maka kemudian akan dilanjutkan dengan baris-baris jawaban  selanjutnya.  Setelah +OK,  server akan mengirimkan header mail, baris kosong untuk memisahkan dengan isi mail, dan  kemudian sejumlah baris isi mail sesuai dengan jumlah yang diminta.  Jika jumlah baris yang diminta oleh client melebihi  jumlah baris  yang ada di mail,  maka POP3 server akan mengirimkan seluruh isi mail. Sedangkan jika diisi  dengan bilangan negatif, maka server akan menganggap sama dengan nol (artinya tidak ada isi mail  yang dikirimkan, yang dikirm hanya header-nya saja).
Jawaban  server :
	+OK 
	-ERR no such messsage or message has already been deleted
Contoh :
	C: TOP 2  5
	S: +OK  190 octets
S: { server  akan mengirimkan header mail, baris kosong dan 5    baris   pertama     dari  isi mail}
S: .

•	UIDL  [nomor_mail]
Perintah UIDL digunakan untuk  menampilkan informasi tentang mail yang ada di server. Informasi tentang sebuah mail  akan ditampilkan dalam satu baris informasi yang biasa  disebut  unique-id  listing  (daftar identitas  yang  unik, yang  berbeda antara mail  yang satu dengan yang lain). Perintah ini hanya dapat diberikan pada  tahap TRANSACTTION. Argumen [nomor mail] tidak  harus dituliskan. Jika memakai  argumen ini maka  server hanya akan memberikan informasi  tentang mail yang dimaksud saja, sedangkan bila tidak  menambahkan  argumen maka semua informasi  mail  milik user  tersebut  akan  ditampilkan. Mail yang  sudah  diberi tanda penghapusan dengan  perintah DELE  tidak akan ditampilkan informasinya oleh perintah UIDL ini.  
Untuk memudahkan penguraian informasi mail, semua server POP3 perlu menggunakan format tertentu untuk unique-id listing. Sebuah unique-id listing terdiri dari nomor mail, diikuti oleh spasi dan unique-id   dari mail tersebut. Unique-id ini secara unik mengidentifikasi  sebuah mail dalam maildrop  dan berlangsung selama  sesi hubungan.  
Jawaban  server :
	+OK  {diikuti_nomor-mail_dan_ unique-id}
	-ERR  no such messsage
Contoh:
	C: UIDL
	S: +OK uidl command accepted
	S: 1  5bbcfb6250ce3d1a9f61a81ec05fe0f9
	S: 2  8541822a98e890b88d8299d034993f61
	S:  .
	...
	C: uidl 1
	S: +OK 1 5bbcfb6250ce3d1a9f61a81ec05fe0f9

Referensi

•	Myers, J., “Post Office Protocol - Version 3”, RFC 1725, Carnegie Mellon, November 1994.
•	Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821, USC/Information Sciences Institute, August  1982. 
•	Crocker, D., "Standard for the Format of ARPA-Internet Text Messages", STD 11, RFC 822, University of  Delaware, August 1982.
•	Rivest, R. "The MD5 Message-Digest Algorithm", RFC 1321, MIT Laboratory for Computer Science,
        April, 1992.