FILTERING EMAIL dengan PROCMAIL

PENDAHULUAN
Procmail adalah paket open source yang didesain dan dibuat pertama kali oleh Stephen van den Berg. Procmail adalah tool yang digunakan untuk mengotomatiskan proses kedatangan email (incoming email) supaya bisa disortir sehingga anda bisa bebas mengatur arsip mail ke dalam folder-folder secara sistematisdan teratur. Syaratnya, email yang datang akan diproses dengan menggunakan sistem unix/linux dan jika anda:Sebelum melanjutkan alngkah baiknya anda mengerti tentang istilah-istilah yang digunakan dalam artikel ini:
Mail Client / Mail User Agent (MUA)
Suatu program seperti pine, mutt, netscape messenger, microsoft outlook express atau qualcomm eudora yang digunakan user untuk proses email. Proses termasuk membaca, mengextract, atau mengirimkan attachment, memindahkan, mencetak ke printer dan menghapus email.
Server
Sebuah komputer atau program komputer yang dapat merespon permintaan atau melayani komputer yang lain atau program komputer lainnya. Program yang dapat digunakan untuk mengirimkan atau menerima pesan, yang populer di unix seperti sendmail, qmail, exim, postfix, smail.
Local Delivery Agen (LDA)
Program yang dapat digunakan untuk mengirimkan pesan ke mailbox user. Sistem ini seperti (contoh) sendmail yang digunakan untuk mengirim pesan secara lokal.
Mailbox, Message Folder atau Folder
Koleksi atau tempat email-email yang disimpan secara lokal atau di server. Mailbox ini bisa saja satu file atau direktori yang didalamnya terdapat fil-file email.
Default Inbox atau System Mailbox
Apapun yang didefinisikan oleh administrator yang spesifik sebagai primary mailbox (mailbox ynag utama).
List
Mailing List.
Recipe
Suatu kondisi yang diset untuk memfilter pesan dengan suatu kondisi.
String
Sebuah sequence dari karakter yang terdiri atas huruf, angka, dan simbol-simbol termasuk di dalamnya spasi.
Regular Expression (Regex)
Suatu string untuk menginterpretasikan banyak karakter sebagai wildcard atau metacharacter. Contoh metacharacter yang digunakan di procmail regex (lihat tabel di bawah).


MetacharacterArtinya
.semua huruf
(string)treat string sebagai sebuah item
*Match nol atau banyak dari item
?Match nol atau satu yang terdapat di item
+Match satu atau banyak yang terdapat di item
^mulai dari awal
$mulai dari akhir
[char list] karakter apapun dalam kurung
[^char list]karakter apapun yang tidak terdapat dalam kurung
\string satu kata
|Operator atau


pico / vim / joe adalah text editor

~ atau $HOME
Adalah home directory anda. Anda bisa selalu gunakan perintah "cd" untuk kembali ke home directory anda.

Pengaturan Arsip Email dengan Procmail
Dengan procmail anda bisa mengorganisasi sesuai dengan kondisi yang anda sukai dari mailbox beserta direktorinya. Kebebasan yangdiberikan procmail sangat powerfull tetapi bisa juga menjadi suatu yang buruk dalam mengorganisasikan pesan dan penamaan dari procmail file dan direktori.
Kini kita mulai mencoba langkah demi langkah untuk membuat suatu proses kedatangan email dengan promail. Ikuti 16 langkah berikut ini.

Apakah procmail sudah terinstall di sistem anda
Satu, Untuk menemukan program procmail sudah terinstall di sistem dan di path mana. ketikkan perintah ini (berdasarkan jenis shell yang digunakan):

ShellPerintah
csh,tcshwhich procmail
sh, bash, kshtype procmail
semua shellwhereis procmail
semua shelllocate procmail
dua, Untuk menemukan versi berapa dari procmail di sistem anda, ketik:
# procmail -v
JIka di sistem anda tidak terdapat procmail atau tidak mempunyai versi terakhir (3.15 direlease 30 agustus 2000), mintalah ke administrator anda untuk menginstallnya. Untuk mendownload versi terakhir kunjungi url http://www.procmail.org

Set up procmail anda untuk testing
tiga, create ~/.procmailrc dengan mengetik:
# cd
# vim .procmailrc

Di artikel ini saya menggunakan vim (vim.org) untuk mengedit file. Anda bisa gunakan editor yang anda sukai seperti pico, joe, dll.

empat, Silahkan ketik script di bawah ini dengan nama file ~/.procmailrc. Tanda # adalah komentar dan akan diabaikan oleh procmail.
# Set ke yes ketika ingin mendebug
VERBOSE=no

# Hapus ## ketika mendebug; set ke no jika ingin melog secara minimal
## LOGABSTRACT=all

# ganti $HOME/MAIL-ARCHIVES dengan direktori dimana email file anda disimpan
# Mutt dan elm menggunakan direktory $HOME/Mail
# Pine menggunakan direktori $HOME/mail
# Netscape Messenger menggunaan $HOME/nsmail
# yang lainnya seperti slrn & nn, menggunakan direktori $HOME/News

# Saya definisikan sendiri semua email akan dideliver ke ~/MAIL-ARCHIVES/

MAILDIR=$HOME/MAIL-ARCHIVES

# direktori untuk menyimpan relasi procmail file
PMDIR=$HOME/Procmail

# Gunakan tanda ## sebelum me-log file jika anda tidak ingin me-log-kan proses ke file tapi ini tidak dianjurkan

LOGFILE=$PMDIR/procmail.log
INCLUDERC=$PMDIR/testing.rc
INCLUDERC=$PMDIR/lists.rc

lima, Untuk membuat direktori untuk menyimpan hasil filter procmail (disimpan di variable $PMDIR seperti terlihat di step 4), ketik:
# cd
mkdir Procmail
mkdir MAIL-ARCHIVES

enam, Membuat rc file untuk testing dengan mengetik:
# cd Procmail
# vim testing.rc

tujuh, Ketikkan di ~/Procmail/testing.rc :
:0:
* ^Subject:.*test
in-testing

Perhatian: Di baris tertulis :0: (angka nol bukan huruf "O").

Mensetting .forward file
Jika sistem anda menggunakan procmail sebagai local delivery agent, anda tidak membutuhkan .forward file; gampangnya gunakan .procmailrc. Sebagai contoh, RedHat Linux 6.0 (dan 6.x) default install menggunakan procmail sebagai local delvery agent. Jadi anda langsung baca langkah 10. Tanyakan ke administrator anda apakah procmail di install sebagai local delivery agent atau bukan.

delapan, Create ./.forward dengan menggunakan vim.
# cd
# vim .forward
"|IFS='' && exec /usr/local/bin/procmail \f-||exit 75 #user"
Perhatian: Gantian user sebagai user id anda.

Set file & direktori permission
sepuluh, Untuk mengeset permission, ikuti langkah berikut:
# cd
# chmod go-w,a+x
# chmod go-w .procmailrc
# chmod 644 .forward


Test procmail setup anda
sebelas,
Kirimlah email ke anda sendiri: satuyang berisi procmail testing di subjectnya dan satu tidak berisi test di subjectnya.Seperti berikut ini lakukan di sistem anda sendiri:

# mailto [user] # ganti [user] dengan login anda
Subject: testing
Testing procmailrc
EOT # tekan control-D untuk mengakhiri

# mailto [user] # ganti [user] dengan login anda
Subject: Satu lagi
Testing kedua
EOT # tekan control-D untuk mengakhiri.


dua belas, Gunakan mail client anda, seperti pine atau mutt, untuk mengecek apakah pesan tersebut terkirim dengan benar. Satu pesan dengan subject procmail testing akan dikirim ke mailboc MAIL-ARCHIVES/in-testing dan satu lagi dikirim ke default inbox. Jika pesan tidak terkirim dengan benar, bacalah bagian trouble di bagian selanjutnya akan dijelaskan.
# cd
# cd MAIL-ARCHIVES/
# ls
in-testing
# mutt -ff ~/MIAL-ARCHIVES/in-testing


Membuat Recipies untuk mensortir pesan mailing list
tiga belas,
Setelah sukses untuk testing procmail, sekarang buatlah lists.rc untuk menyortir mailing-list message ke dalam mailbox dengan mengikuti langkah berikut:
# cd
# cd Procmail
# vim lists.rc


empat belas, Di dalam lists.rc buatlah sebuah recipe, seperti 2 contoh berikut ini:
:0:
* ^[email protected]
linux-admin

:0:
* ^[email protected]
linux-programming

:0:
* ^[email protected]
linux-setup


Recipe pertama mengambil pesan yang dikirim ke mailing mailing list [email protected] dimasukkan ke mailbox linux-admin. Recipe kedua mengambil pesan yang dikirmkan ke milis [email protected] dimasukkan ke mailbox linux-programming dan recipe ketiga pesan-pesan yang dikirimkan ke milis [email protected] dimasukkan ke mailbox other. Berikut penjelasan dari recipe diatas.

NotasiArti
:0Mulai recipe
:Locking file
*Memulai kondisi recipe
^TO_Lihat header dengan melihat ke To, Cc, Resent-To atau target spesifikasi lain, satu atau banyak karakter
Linux-admin, linux-programming, linux-setupJika match masing-masing akan dikirim ke mailbox MAIL-ARCHIVES/linux-admin, MAIL-ARCHIVES/linux-programming, MAIL-ARCHIVES/linux-setup


lima belas, Ulangi prosedur di atas (11 dan 12) untuk meyakinkan bahwa procmailrc anda bekerja dengan baik.

enam belas, Apabila ada perintah yang tidak diperlukan anda bisa berikan komentar (#) sebelum perintah-perintah di file .procmailrc
VERBOSE=no
## LOGABSTRACT=all
MAILDIR=$HOME/MAIL-ARCHIVES
PMDIR=$HOME/Procmail
LOGFILE=$PMDIR/procmail.log
## INCLUDERC=$PMDIR/lists.rc


Mengakses mailbox anda
Setelah procmail mengirim pesan ke masing-masing mailbox anda, sekarang anda bisa mengakses pesan-pesan tersebut dengan menggunakan:Perintah untuk client yang spesifik
Perhatikan case-sensitive (huruf kapital dan normal) di kolom direktori.

ClientDirektoriPerintahLock?
Pine~/mailPine \if mailboxya
Mutt~/MailMutt \f +mailboxya
Elm~/MailElm \f =mailboxya
Mail~/mailMail \f /path/mailboxya


Menggunakan Mailstat
Anda bisa menggunakan mailstat, script yang menjadi bagian dari procmail, untuk mengecek log dari procmail. Untuk melihat jika ada di sistem anda, ikuti langkah berikut:# which mailstat
# type mailstat
# whereis mailstat
# where mailstat
# locate mailstat
Jika mailstat ada di dalam sistem anda, ketik:
# mailstat $HOME/Procmail/procmail.log
akan memindahkan log file anda ke log.old dan menampilkan keterangan tentang log anda seperti:

TotalNumberFolder
---------------
99643linux-admin
34081linux-programming
2321linux-setup
---------- 
133725 
Anda bisa menempelkan mailstat ke profile atau login anda, jadi setiap anda login akan menampilkan daftar email berapa pesan anda terima sejak menjalankan mailstat, atau bila sistem anda membolehkan menjalankan cron, bisa anda jalankan secara otomatis setiap satu hari atau seminggu sekali. Seperti perintah cron ini untukmengumpulan dan mengirimkan ke email anda setiap jam 00 pagi:
0 1 * * * mailstat $HOME/Procmail/procmail.log|mail emailmu
untuk meminta help tentang mailstat:
# man mailstat
# mailstat -h

Untuk melihat daftar log yang lama (log.old) gunakan perintah:
# mailstat -o $HOME/Procmail/procmail.log

Jika mailstat tidak terinstall di sistem anda, mintalah kepada system administrator untuk menginstallnya. Mailstat akan anda temukandi procmail tools http://www.procmail.org

Perhatian: Procmail anda bisa bertambah besar kecuali anda secara rutin menghapus log file (menggunakan perintah rm [logfile]. Untuk meminimize logging gunakan VERBOSE=no dan LOGABSTRACT=no di file .promailrc. Untuk mematikan log file tetapi ini tidak dianjurkan mematikan dengan komentar setting LOGFILE seperti ini:
## LOGFILE = procmail.log

Memahami dan mendefinisikan procmail Recipes
Anatomi dari setiap recipe adalah:
:0 flags: namaLockfile
* kondisi 1
* kondisi 2
aksi

Catatan: flag, semo colon (:), namalockfile dan kondisi adalah optional. Jadi minimal isi dari procmail recipe seperti ini:
:0
aksi

berarti aksi setiap pesan yang akan di pass dan tidak mengunci file. Sebuah recipe yang digunakan secara default dan tidak menggunakan flag seperti ini:
:0:
* kondisi 1
* kondisi 2
aksi

Contoh berikut dari sebuah recipe:
:0:
* ^Subject:.*test
in-testing

Perintah tersebut mengandung pengertian:
NotasiArti
:0Memulai sebuah recipe
:kunci file (lock)
^Subject:Melihat header yang dimulai dengan string "Subject:"
.dimulai dengan karakter apapun
*tidak ada atau ada satu ataupun lebih karakter yang diikuti dengan kata "test"
in-testingJika match atau ditemukan pindahkan email tersebut ke mailbox $MAILDIR/in-testing, jika tidak match teruskan ke recipe berikutnya.


mempresisikan dengan sebuah kata
Jika anda menginginkan sebuah kata yang sama persis / presisi dengan kata "test", bisa menggunakan delimiter \< dan \> seperti di bawah ini:
:0:
* ^Subject:.*\< test \> # tanpa spasi antara kata test (dianggap tag html)
in-testing

Recipe di atas jika tidak match pesan test misalnya testing, tested tidak akan dimasukkan ke direktoriin-testing, dengan kata lain hanya email yang bersubject test yang sama persis (bukan testing/tested, dll) akan dimasukkan ke $MAILDIR/in-testing

Alternatif menguunakan ^TO_Expression
Selain TO_expression bisa juga menggunakan expresi seperti:

Seperti contoh anda ingin menangkap semua pesan yang dikirim termasuk Bcc untuk mail yang dikirim ke mailing list vim gunakan hal seperti ini:
:0:,br>* ^Delivered-to:.*[email protected]
linux-desktop


Contoh lainnya:

:0:
* ^List-Id:.*majalah
in-l-majalah



Menggunakan Operator extra dan $MATCH untuk mensortir mailing list
Jika anda terdaftar di banyak mailing list dan setiap recipe memiliki seperti ini: linux-admin, linux-programming, linux-setup, anda bisa mempercepat proses dengan mengkombinasikan semua mailing list recipe ke dalam suatu recipe seperti ini:
:0:
* ^TO_\/(list1|list2|list3)
in-l-$MATCH


NotasiArti
:0Mulai sebuah recipe
:Lock file
*Mulai kondisi
^TO_Lihat ke header yang dimulai dengan To, Cc, Resent-To atau target spesifikasi yang diikuti oleh karakter apapun atau tidak ada.
\/Jika ada yang match setelah operator extra
(list1|list2|list3)String list1 atau list2 atau list3
In-l-$MATCHJIka match masukkan ke mailbox $MAILDIR/in-l-$MATCH, match adalah variable dimana list1, list2 atau list3 ditemukan, jika tidak match teruskan ke recipe berikutnya

Misalnya:
:0:
* ^TO_\/([email protected]|[email protected]|[email protected])
in-l-$MATCH

Mailbox anda akan dinamakan
[email protected]
[email protected]
[email protected]

Kelihatannya lucu kalau melihat direktori di atas, jadi mungkin seperti ini:
:0:
* ^TO_\/(admin|setup|programming)
in-l-$MATCH

Ini akan membuat nama mailbox yang bagus tetapi akan menyebabkan pesan yang tertulis admin/setup/programming misalnya [email protected] akan dimasukkanjuga. jadi mungkin bisa ditambahkan dengan karakter (@) jadi kondisinya seperti ini:
:0:
* ^TO_\/(linux-admin|linux-setup|linux-programming)@
in-l-$MATCH

Ini akan membuat lebih baik hanya pesan procmail@ dan vim@ yang akan dimasukkan ke direktori spt ini:
in-l-linux-admin@
in-l-linux-setup@
in-l-linux-programming@

Untuk menghapus trailing @ dari mailbox name anda bisagunakan recipe berikut:
:0:,br>* ^TO_\/{list1|list2|list3)@
* MATCH ?? ()\/[^@]+
in-l-$MATCH

Berikut keterangannya:
NotasiArtinya
:0Mulai sebuah recipe
:lock file
*Mulai kondisi
^TO_Lihat ke header yang dimulai dengan To, Cc, Resent-To atau target spesifikasi yang diikuti oleh karakter apapun atau tidak ada
(list1|list2|list3)@String list1 atau list2 atau list3
in-l-$MATCHJIka match masukkan email ke mailbox $MAILDIR/in-l-$MATCH, match adalah variable dimana list1 atau list2 atau list3 ditemukan, jika tidak match teruskan ke recipe berikutnya
()\/Jika ada yang match setelah operator ()\/ masukkan ke variable match (timpakan nilai yang lama)
[^@]Semua karakter selain @
in-l-$MATCH Jika sukses simpan ke $MAILDIR/in-l-$MATCH, jika tidak teruskan ke recipe berikutnya


Menonaktifkan Procmail
Suatu saat file .forward dan .procmailrc ada di home dir anda dan mungkin membawa problem ketika mengirimkan kembali, hal tersebut bisa menghilangkanpesan anda atau bahkan looping. Untuk itu cepatlah anda periksa promail dan renamelah .forward anda atau .procmailrc anda, caranya:
#cd
#mv .forward .forward.off
#mv .procmailrc .procmailrc.off

Untuk mengembalikan ke semula rename kembali ke semula
#cd
#mv .forward.off .forward
#mv .procmailrc.off .procmailrc


Troubleshooting
Jika pesan anda tidak terkirim dengan benar, maka anda bisa melakukan langkah-2 untuk solve problem tersebut:

Fetchmail
Fetchmail adalah program untuk mengambil email dari ISP jika anda mempunyai email account di ISP. Procmail mengatur untuk menempatkan email di server anda, fetchmail dapat menghandle email server termasuk pop3 dan imap. Konfigurasi fetchmail sangat simple sama seperti procmail anda tinggal membuat suatu file di home dir anda dengan nama .fetchmailrc seperti contoh isinya, sbb:

pool ww.contoh.com with proto POP3 user 'kabayan' there with password 'mypass' is kabayan here

Keterangan tiap bagian di atas:
poll www.contoh.com, hubungi www.contoh.com yaitu pop3 server ISP anda

with proto POP3, menggunakan protokol pop3 untuk mengambil email

user 'kabayan' there, login saya kabayan untuk mengambil email dari ISP

with password 'mypass', password emial di ISP

is kabayan here, kabayan adalah user dari email server lokal

Simpanlah file tersebut di home dir anda dan supaya aman tidak terbaca oleh user lain lakukan hal berikut:
#chmod 700 .fetchmailrc


--oOo--


sumber:
Majalah bulanan Infolinux
No. 04 / I / 2001
homepage: www.infolinux.co.id





Copyright (a) 2001 Pelik
Design by globalnet

Hosted by www.Geocities.ws

1