Akses Gmail Menggunakan PHP+IMAP

Untuk beberapa tulisan kedepan, saya akan membuat tulisan berseri tentang PHP+IMAP. Untuk tulisan kali ini, kita fokus pada bagaimana cara membaca Gmail dari PHP.

Persiapan

Syarat pertama yang diperlukan, tentu saja, library imap untuk PHP. Kalau pakai xampp, biasanya sudah included. Kalau pakai ubuntu, tinggal install paket php5-imap. Untuk bisa melakukan koneksi IMAP, yang diperlukan selain username dan password account tersebut adalah URL koneksi ke provider IMAP itu sendiri. Kalau pakai GMail, berarti URLnya adalah sebagai berikut:

{imap.gmail.com:993/imap/ssl}INBOX

Dimana INBOX adalah IMAP folder yang ingin dibaca. Kalau dalam kasus GMail, ini berarti label. Beberapa contoh folder yang valid lainnya adalah:

  • [Gmail]/Drafts: Semua draft email
  • [Gmail]/Important: Semua email yang diberi level important (pada interface baru gmail)
  • [Gmail]/Starred: Semua email yang dibintangi
  • appenginejs: Bila anda memiliki label [appenginejs]

Membuka koneksi

Setelah informasi ini didapat, kita bisa membuka koneksi IMAP dengan cara:

$email    = "email@gmail.com";//atau alamatemail@nama_domain_hosted
$password = "ini password anda";

$imap_host = "{imap.gmail.com:993/imap/ssl}";

$imap_folder = "INBOX"; //juga bisa disebut sebagai label

$mailbox = imap_open($imap_host . $imap_folder,$email,$password) or die('Gagal membuka koneksi ke GMail: ' . imap_last_error());

Apabila tidak ada error, berarti kita sudah berhasil membuat koneksi ke Gmail dengan informasi koneksi di variable $mailbox.

Mencari email

Selanjutnya kita bisa mengambil email dengan imap_search():

$emails = imap_search( $mailbox, 'ALL');

Imap search menerima parameter berupa koneksi imap yang sudah established dan apa yang ingin dicari.
Beberapa contoh query yang memungkinkan:

  • ALL: Mencari semua email
  • BODY string: Mencari email yang terdapat ‘string’ di body-nya
  • FROM string: Mencari email yang dikirim oleh ‘string’
  • NEW: Mencari email yang baru dan belum dibaca (serupa dengan query pencarian ‘RECENT UNSEEN’
  • UNSEEN: Mencari email yang belum dibaca

Daftar lengkap query pencarian bisa dibaca di halaman RFC 1176. Silahkan search string “tag SEARCH search_criteria

Memproses hasil pencarian

Setelah email didapat, tinggal melakukan looping dari semua data yang dihasilnya:

if( $emails )
{
	foreach( $emails as $email_id)
	{
		$email_info = imap_fetch_overview($mailbox,$email_id,0);
		$message = imap_fetchbody($inbox,$email_number,2);
		echo "Subject: " . $email_info[0]->subject . "\n";
		echo "Message: " . $message . "\n";
	}
}

Fungsi imap_search_overview() digunakan untuk memperoleh informasi dari suatu email (subject, from, cc, dll). Sedangkan imap_fetchbody() digunakan untuk memperoleh pesan itu sendiri (termasuk juga untuk mengextract attachment).

Bagaimana? mudah kan? Untuk kode lengkapnya, silahkan copy-paste code berikut:

<?php
$email    = "alamat@emailgmailanda.com";
$password = "password anda";

$imap_host = "{imap.gmail.com:993/imap/ssl}";

$imap_folder = "INBOX"; //juga bisa disebut sebagai label

$mailbox = imap_open($imap_host . $imap_folder,$email,$password) or die('Gagal membuka koneksi ke GMail: ' . imap_last_error());

$emails = imap_search( $mailbox, 'ALL');

rsort($emails);
if( $emails )
{
	foreach( $emails as $email_id)
	{
		$email_info = imap_fetch_overview($mailbox,$email_id,0);
		$message = imap_fetchbody($inbox,$email_number,2);
		
		echo "Subject: " . $email_info[0]->subject . "\r\n";
		echo "Message: " . $message . "\n";
	}
}
?>

Author: Arief Bayu Purwanto

Hello, my name is Arief Bayu Purwanto, a 24 years old father of a beautiful daughter. Interested in online programming, linux, games, and reading. Currently working on kapanlagi.com as junior developer. I live in a relatively quite and cool place called Malang. I'm available for some freelance stuff as well as some consulting job. You can see my portofolio for some previous task I've finished and some other information related to my capability. Btw, I'm plurking here.