Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Email
Code

Membangun Fitur Email Tingkat Lanjut dengan IMAP dan PHP

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

What You'll Be Creating

Dalam tutorial ini, saya akan memandu Anda melalui beberapa contoh nyata tentang bagaimana Anda dapat menggunakan PHP dan IMAP untuk membangun fitur baru untuk mengelola email—fitur yang belum dibangun penyedia email besar bagi kita.

Ketertarikan saya pada ini dimulai pada tahun 2010 ketika saya menulis Dua Belas Gagasan Gmail untuk Merevolusi Email (Lagi), namun sebagian besar gagasan yang saya harapkan tetap berada di luar jangkauan. Sama pentingnya dengan email, inovasi email sebagai aplikasi cukup lambat.

Kita tenggelam dalam email, dan mengelola inbox kita tetap menjadi beban yang berat. Layanan mail dan klien telah melakukan sangat sedikit untuk membantu kita dengan ini. Sebagian besar email yang kita terima dikirim oleh mesin, bukan orang-orang, dan kita adalah orang-orang yang harus memproses semuanya secara individual.

Analisis dari email saya sendiri menunjukkan bahwa saya menerima email dari lebih dari 230 pengirim otomatis, jauh lebih sedikit dari orang yang sebenarnya. Saya sudah bosan membangun filter di Gmail dan mengisi segudang form berhenti berlangganan. Saya ingin memiliki lebih banyak kontrol atas pengelolaan email saya dan menyederhanakan hidup saya.

Akhirnya, tahun yang lalu ini, saya memutuskan untuk membangun fitur yang saya butuhkan. Hasilnya adalah Simplify Email (SE), aplikasi web kecil yang bisa Anda host sendiri yang menawarkan berbagai fitur email keren baru yang semuanya bisa Anda kunjungi di situs web proyek.

Hal yang paling keren tentang SE adalah bahwa ini adalah platform untuk membaca, menganalisis, merutekan dan mengelola email Anda—kemungkinannya berlimpah. Simplify Email pada dasarnya adalah taman bermain yang dapat diprogram untuk "hacking" email Anda sendiri.

Saya akan memandu Anda melalui kode tiga contoh dari SE yang menggunakan PHP, IMAP, dan MySQL untuk bekerja dengan email:

  1. Memeriksa inbox dan penyaringan pesan Anda
  2. Menerapkan tantangan Whitelist kepada pengirim yang tidak dikenal
  3. Melaporkan email yang tidak terjawab

Tutorial ini pasti akan memberi Anda keuntungan saat menulis kode IMAP di PHP. Tapi Anda juga bisa bekerja secara langsung dengan basis kode Simplify Email. Anda dapat membeli kode tersebut sekecil $10, dan ada versi open source yang lebih lama (yang tidak memiliki beberapa fitur yang kami gambarkan di bawah ini). Panduan instalasi disediakan untuk konfigurasi Linux yang khusus. Saya juga menawarkan image pra-instal di Digital Ocean seharga $25 dan juga pemasangan valet alat genggam. SE ditulis dalam PHP, di Kerangka Yii.

Perhatikan bahwa Anda tidak akan dapat mengakses sebagian besar server email melalui mesin pengembangan lokal Anda kecuali Anda mengkompilasi pustaka IMAP yang aman untuk PHP. Inilah salah satu alasan mengapa saya mendorong orang untuk menjalankan Simplify Email dalam droplet di Digital Ocean. Ada juga beberapa trik untuk mendapatkan izin keamanan akun Google agar Anda bisa masuk melalui IMAP.

Bekerja dengan IMAP

Cara Simplify Email Bekerja

Dengan SE, Anda dapat terus menggunakan klien email pilihan Anda di Web dan perangkat seluler Anda. Anda tidak perlu mengubah aplikasi atau kebiasaan pribadi apa pun. SE mengakses akun email Anda di balik layar melalui IMAP; bertindak sebagai asisten pribadi yang cerdas, SE melakukan pra-proses email Anda sebelumnya, memindahkan pesan ke tempat yang sesuai berdasarkan semua hal yang Anda katakan kepadanya.

Saat pesan tiba dari pengirim yang sudah dikenal, SE memindahkannya ke folder yang Anda tentukan. Ketika datang dari pengirim yang tidak dikenal untuk pertama kalinya, ia memindahkannya ke folder tinjauan.

Setiap beberapa jam (atau pada frekuensi yang Anda pilih), SE akan mengirimkan ringkasan dari mana pesan Anda dipindahkan dan pesan mana yang sedang diperiksa. Catatan, tautan untuk pengirim pelatihan disertakan untuk folder tinjauan, sehingga cukup mudah untuk melatih SE dari waktu ke waktu.

The Simplify Email Message Digest Shows You What Came In and How It Was Filtered

Setiap saat, Anda dapat menelusuri folder tinjauan—Anda tidak perlu menunggu mencerna tiba. Namun keuntungan dari SE adalah Anda tidak perlu lagi menelusuri folder Anda; Anda bisa membaca ringkasan Anda untuk mendapatkan tampilan email yang telah Anda terima dan mengatur pengirim baru.

1. Memeriksa Kotak Masuk dan Penyaringan Pesan Anda

SE menggunakan beberapa tugas cron untuk beroperasi di latar belakang server Anda. Masing-masing disebut dari DaemonController.php.

Yang pertama, processInbox, yang sering dipanggil dan perlu beroperasi dengan cepat—tugasnya adalah untuk menyaring email dan memindahkannya keluar dari Kotak Masuk secepat mungkin dan masuk ke folder triase, yang disebut folder penyaringan.

Yang kedua, processFiltering, proses yang lebih intensif dan melakukan operasi yang lebih dalam pada email, akhirnya memindahkan pesan ke tujuan akhir mereka.

Metode ProcessInbox

Tugas cron memanggil processInbox secara teratur:

The Simplify Email Accounts Configuration Page

Untuk setiap akun, kami mendekripsi kredensial e-mail Anda dan kemudian menggunakan imap_open untuk membuat aliran IMAP ke folder kotak masuk Anda:

Di dalam processInbox, kami menggunakan fungsi pustaka PHP imap_search dan imap_fetch_overview untuk mengambil berbagai pesan:

Kemudian kami memproses sejumlah pesan di kotak masuk:

Berikut adalah versi adaptasi dari kode parsing header IMAP yang tersedia untuk publik yang mengumpulkan informasi tambahan yang dibutuhkan SE untuk berbagai tugas. Pada dasarnya, ia menggunakan imap_rfc822_parse_adrlist untuk menentukan informasi penerima, message-id, subjek dan timestamp (atau informasi pengirim saat memindai folder terkirim):

Kami membuat record untuk pengirim dan amplop pesan di dalam database kami:

Jika pengirimnya baru dikenal (tidak diketahui), kami akan mengirim email tantangan daftar putih (kita akan membicarakan tantangan daftar putih di bagian selanjutnya di bawah ini):

Selanjutnya, kita menentukan apakah pengguna mungkin telah menyeret pesan dari folder lain kembali ke kotak masuk—berniat untuk mengaturnya melalui drag and drop. Jika iya, kami menetapkan pengaturan untuk pengirim ini ke kotak masuk. Dengan kata lain, lain kali, kami ingin mengarahkan pesan dari pengirim ini ke kotak masuk:

Jika tidak, kami akan mempersiapkan untuk memindahkan pesan ke folder Filtering untuk diproses lebih lanjut. Pertama, kami mungkin mengirimkan notifikasi ke telepon pengguna jika ada kecocokan pengirim atau kata kunci yang cocok untuk pemberitahuan (dan ini bukan pada jam tenang):

Jika pesan diseret ke kotak masuk, kami akan memperbarui penetapan pengaturan kami:

Metode ProcessFiltering

Metode pemrosesan sekunder disebut processFiltering, juga di DaemonController.php. Aspek yang lebih menyita waktu untuk memindahkan pesan ke folder yang sesuai:

Metode ini membuka akun email Anda untuk mencari pesan-pesan terakhir dan mengumpulkan data tentangnya. Ini juga menggunakan imap_search, imap_fetch_overview dan parseHeader:

Loop pengolahan utama untuk setiap pesan dalam folder penyaringan cukup rinci. Pertama, kami melihat alamat penerima, karena SE memungkinkan orang untuk mengatur folder menurut alamat penerima, mis. pesan-pesan ke domain happyvegetarian.com masuk ke folder sayuran:

Kemudian kami mencari pengirim dan membuat record baru di database (jika perlu). Jika ada pengaturan untuk pengirim, kami bisa mengatur folder tujuan:

Jika pengirim (baru) yang tidak teratur telah memverifikasi dirinya melalui tantangan Daftar Putih (yang akan kami bahas di bagian selanjutnya di bawah), kami akan mengarahkan pesan ini ke kotak masuk:

Kemudian, kami membuat entri pesan di database dengan informasi amplop tentang pesan ini:

Jika dari pengirim yang tidak dikenal dan tidak terverifikasi, kami dapat memindahkan pesan ke folder tinjauan. Folder tinjauan berisi semua pesan dari pengirim yang tidak kita kenali.

Jika pesan berasal dari pengirim yang diketahui dan kita memiliki tujuan tertentu, kita dapat memindahkannya selama tidak pada jam tenang (dan do not disturb tidak aktif):

Selama jam-jam tenang, pesan terutama disimpan di folder penyaringan.

Setiap beberapa jam, proses yang berbeda akan membangun pencerna pesan menggunakan record tabel pesan untuk menentukan email mana yang baru saja diterima dan disaring dan bagaimana mereka diarahkan.

2. Menerapkan Tantangan Daftar Putih pada Pengirim yang Tidak Dikenal

Tujuan dari tantangan daftar putih adalah menjaga pesan dari pengirim yang tidak dikenal, mis. mungkin bot pemasaran atau spammer, keluar dari kotak masuk Anda. SE menempatkan email dari pengirim yang tidak dikenal di folder tinjauan. Namun, jika Anda mengaktifkan daftar putih, kami mengirimkan email tantangan yang memberi si pengirim kesempatan untuk memverifikasi bahwa mereka adalah manusia. Jika mereka merespons, kami akan memindahkan pesan ke kotak masuk Anda. Jika email ternyata tidak diinginkan, Anda dapat menghapus pesan dari pencerna atau menyeretnya ke folder manapun yang ingin Anda atur.

Pengguna dapat mengaktifkan dan menonaktifkan daftar putih di pengaturan:

Simplify email settings for whitelisting

Pengaturan Simplify Email untuk daftar putihUntuk menerapkan daftar putih, kami mengirimkan tantangan email setiap kali surat masuk dari pengirim baru:

ChallengeSender mengirimkan link berkode kepada pengguna agar mereka klik. Kami juga memiliki beberapa perlindungan untuk memastikan kita tidak menjebak diri kita dalam loop email dengan pesan di luar kantor:

Kemudian, jika penerima mengklik tautan kode, kami memverifikasinya di database. Sender Controller memproses permintaan ini dan memeriksa validitasnya:

Ini memberitahu loop pengolahan kami untuk memindahkan pesan ini dan yang akan datang dari pengirim ini ke kotak masuk.

3. Melaporkan Email yang Tidak Terjawab

Terkadang ada baiknya melihat ringkasan pesan yang telah Anda kirim namun tidak mendapat jawaban. Untuk mengidentifikasi ini, Simplify Email memonitor pesan yang telah dikirim namun belum mendapat jawaban.

Setiap pesan yang kami terima berisi id unik, yang disebut message_id (bagian dari spesifikasi IMAP). Seringkali terlihat seperti ini:

Message-Id: Selanjutnya, saat pesan dikirim untuk membalas pesan lainnya, mereka memiliki field in_reply_to yang terhubung kembali ke message_id yang asli.

Jadi, kita menggunakan query SQL untuk menemukan semua pesan yang diterima yang tidak memiliki pesan balasan yang sesuai yang mereferensikan message_id mereka. Untuk ini, kami menggunakan LEFT OUTER JOIN dimana tidak ada id in_reply_to:

Kami menggunakan mode $subject_compare untuk membedakan antara pesan terkirim yang belum terjawab dan balasan yang dikirim ke rangkaian yang belum terjawab. Inilah laporan pesan yang tidak terjawab di akun Anda:

Unanswered sent emails and unanswered sent replies threads

SE juga menawarkan informasi ini sebagai pencerna opsional, yang disebut pencerna email yang belum terjawab. Anda bisa menerimanya setiap hari, setiap beberapa hari atau setiap minggu.

Kami juga menggunakan tabulasi SQL serupa dengan Google Charts untuk memberikan laporan tentang seberapa sering orang tertentu mengirim email kepada Anda:

Reports of inbound email frequency by sender

Saya akan menulis lebih banyak tentang Google Charts untuk Tuts+ segera.

Langkah Selanjutnya

Saya harap Anda telah menemukan Simplify Email yang cukup menarik untuk dicoba di pemrograman PHP IMAP. Ada begitu banyak fitur keren yang bisa Anda bangun tanpa memerlukan penyedia email besar untuk melakukan sesuatu yang baru.

Jika Anda memiliki pertanyaan atau koreksi, silakan kirimkan ke komentar. Jika Anda ingin mengikuti tutorial Tuts+ saya di masa depan dan serial lainnya, ikuti @reifman atau kunjungi halaman penulis saya. Anda juga bisa menghubungi saya di sini.

Link Terkait

Berikut adalah beberapa tautan tambahan yang mungkin berguna bagi Anda:

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.