Indra Dermawan (13294025)
Filtering Mail Dengan Procmail
Indra Dermawan
Dosen: Onno W. Purbo

	Procmail adalah sebuah utilitas yang berguna untuk melakukan pemrosesan email yang dibuat oleh Stephen van den Berg dari Jerman. Procmail berjalan pada sistem operasi UNIX dan dapat digunakan memroses email yang datang atau email yang sudah ada di dalam folder.
	Dalam artikel ini akan dijelaskan cara menggunakan procmail dan contoh-contoh penggunaan procmail untuk melakukan fungsi tertentu, misalnya membuang email yang datang dari alamat tertentu dan memasukkan email dari suatu mailing list ke folder tertentu.

Mekanisme Kerja Procmail
	Sistem mail UNIX terdiri dari MTA (mail transport agent seperti sendmail, smail, qmail, mmdf, dan sebagainya), MDA (mail delivery agent seperti sendmail, deliver dan procmail), dan MUA (mail user agent seperti elm, pine, /bin/mail, mh, Eudora, dan Pegasus). Pada kebanyakan sistem UNIX di Internet “sendmail” digunakan sebagai kesatuan transport dan delivery agent. ‘sendmail’ dan MTA lain yang kompatibel memiliki kemampuan untuk mengirim mail melalui filter atau program tertentu melalui dua mekanisme, aliases dan forward.
	Mekanisme aliases menggunakan sebuah file (biasanya /etc/aliases atau /usr/lib/aliases) untuk mengarahkan mail. File ini dimiliki oleh sistem administrator. Oleh karena itu tidak dapat dimodifikasi oleh user.
	Sebaliknya, mekanisme forward bersifat desentral. Tiap user dapat membuat sebuah file bernama .forward dalam home direktori masing-masing user untuk keperluannya masing-masing. Kita dapat mem-forward mail melalui suatu program dengan sebuah file .forward yang berisi baris : “|$HOME/bin/program”. Perhatikan bahwa tanda kutip dua harus dikutsertakan.
	Penjelasan di atas berlaku untuk semua MTA/MDA yang kompatibel dengan sendmail. Penjelasan selanjutnya akan spesifik mengarah kepada procmail.

Mencari Path Procmail
	Pertama-tama kita harus memastikan bahwa procmail sudah ada di mesin yang kita gunakan. Tabel berikut menunjukkan perintah-perintah yang digunakan untuk berbagai shell.
Tabel 1. perintah-perintah untuk mencari path procmail.
Shell	Perintah	
Csh	which procmail	
sh atau ksh	type procmail	
berbagai shell	whereis procmail	
berbagai shell	where procmail	

Dengan perintah ini kita dapat mengetahui path tempat program procmail berada. Path ini akan diperlukan untuk membuat file .procmailrc yang akan dijelaskan kemudian. Untuk mengetahui versi procmail yang kita gunakan, ketikkan :
procmail –v

Membuat File .forward
	Untuk menggunakan procmail sebagai pemroses mail, kita buat file .forward dalam home direktori (/home/namauser/) yang berisi satu baris berikut :
“|IFS=’ ‘&&exec /usr/local/bin/procmail –f-||exit 75 #nama_user”
Baris di atas memiliki arti khusus bagi sendmail, yaitu :
•	pipe mail ke perintah berikut
•	set inter-field separator (IFS) dari shell ke sebuah spasi – jika berjalan dengan baik, (&&) eksekusi prgram bernama “/usr/local/bin/procmail”. Path tempat procmail didapat dari perintah : procmail –v pada bagian sebelumnya.
•	Program procmail diberikan switch “–f- “ yang memerintahkan procmail untuk meng-update waktu pada baris ‘From’ pada header mail.
•	Bagian berikut adalah operator “||”yang merupakan kelanjutan  dari operator “dan” (&&). Operator “||” memberikan alternatif, jika perintah (pada point kedua dan ketiga) tidak dapat dijalankan, kemudian keluar dan memberikan nomor error 75.
•	Bagian terakhir adalah sebuah komentar. Bagian ini harus diganti dengan nama login masing-masing user.

Membuat File .procmailrc
	Kemudian kita buat suatu file yang bernama .procmailrc di dalam home direktori. File ini berisi recipe-recipe yang akan menentukan proses apa yang akan dijalankan oleh procmail. Recipe memiliki format berikut :
:0 [flag] [: [lock-file] ]
satu atau lebih kondisi
satu baris aksi
Pada prinsipnya, jika kondisi terpenuhi, aksi akan dijalankan. Contoh recipe berikut akan memfilter mail dari mailing list pau-mikro dan menaruhnya pada mailbox pau-mikro.
:0:
* ^(From|Cc|To).*pau-mikro
pau-mikro
Baris aksi pada contoh di atas adalah nama folder tempat menaruh mail. Aksi dapat berupa sebuah alamat untuk mem-forward mail, atau sebuah program untuk memulai sebuah blok perintah.
	Baris kondisi memberitahu procmail untuk mencari suatu pola string pada mail yang datang. Pola ini disebut regular expression. Baris kondisi di atas memiliki arti :
pada permulaan baris, ‘From’ atau ‘Cc’ atau ‘To’, diikuti beberapa karakter, diikuti oleh ‘pau-mikro’.
	Kebanyakan .procmailrc memiliki lebih dari satu recipe. Perhatikan bahwa procmail akan berhenti jika menemui sebuah recipe yang sesuai dengan pesan pada mail, kecuali jika kita membuat suatu kondisi agar procmail meneruskan pengujian kondisi.

Regular Expression
	Regular expression bersifat case-sensitive. Tiap karakter (yang bukan karakter khusus) cocok dengan karakter itu sendiri. Karakter ini mencakup semua huruf dan bilangan dan beberapa tanda baca. Sebagai contoh, regular expression 
Bob
akan cocok dengan string “Bob”, tapi tidak cocok dengan “bob”.
Sebuah titik ‘.’ cocok dengan tiap karakter, kecuali sebuah baris baru. Jadi ekspresi
.ob Jones
akan cocok dengan string “Bob Jones”, juga dengan “Rob Jones” dan juga dengan “Tob Jones”.
Tiap karakter yang diikuti oleh “*” cocok dengan karakter tersebut sebanyak nol atau lebih kali. Jadi
Bob* Jones
cocok dengan “Bo Jones”, “Bob Jones”, atau “Bobbbbbbbb Jones”.
Jika sebuah karakter dalam sebuah pola dapat berupa salah satu dari sebuah kelompok karakter, gunakan sebuah kelas karakter. Contoh :
Part [abcd]
cocok dengan “Part a”, “Part b”, “Part c”, dan “Part d”.  Ekspresi “a+” cocok dengan satu atau lebih “a”. Ekspresi “a?” cocok dengan nol atau satu “a”. Kita dapat menggunakan tanda kurung untuk mengelompkkan sebuah ekspresi untuk digunakan bersama dengan sebuah modifier. Jadi ekpresi
B(ob)+
cocok dengan “Bob” dan juga “Bobobobobob”.
Jika karakter pertama dalam sebuah kelas adalah ‘^’, kelas tersebut cocok dengan apapun yang tidak terdapat dalam kelas. Contoh :
[^aiueo]+
cocok dengan satu atau beberapa karakter konsonan.
Operator selanjutnya adalah karakter ‘|’ (bar vertikal). Operator ini digunakan untuk mencocokkan dengan salah satu dari dua ekspresi. Contoh :
Bob|Joe
akan cocok dengan “Bob” atau “Joe”.
Dua karakter yang terakhir adalah ‘^’ dan ‘$’. Karakter ‘^’ yang tidak berada dalam sebuah kelas karakter menunjukkan permulaan baris, dan ‘$’ menunjukkan akhir sebuah baris. Contoh :
^To:
akan cocok dengan string ‘To:’ pada permulaan sebuah baris.
	Setelah mengetahui beberapa ekpresi regular, contoh baris-baris pada recipe berikut akan lebih mudah dipahami.
:0:	# tanda titik dua yang terakhir menunjukkan penggunaan lock-file
^To:.*merdeka
merdeka	# masukkan pesan ini ke dalam folder ‘merdeka’
Hal yang perlu diingat adalah jangan memberikan komentar pada baris kondisi, karena procmail akan menganggapnya sebagai bagian dari pola yang ingin dicari.
	Pada saat tulisan ini dibuat, procmail terbaru adalah versi 3.11 pre7. Paket procmail ini dapat didownload dari :
ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/procmail.tar.gz.
	Banyak source di Internet yang menjelaskan tentang penggunaan procmail ini. Penulis menyarankan untuk menggunakan search engine altavista (http://www.altavista.com) untuk mencari informasi tentang procmail, karena altavista telah mengkelaskan key search yang kita berikan. Gunakan key search “procmail”. Informasi mengenai procmail yang lebih lengkap tersedia secara online pada mesin UNIX, untuk melihat informasi tersebut gunakan :
%man procmail
%man procmailrc
%main procmailex
%man procmailsc