Keunggulan PHP Mailer
Kali ini Saya mau berbagi pengalaman (tutorial) tentang pengiriman e-mail lewat script PHP dengan bantuan library PHPMailer. PHPMailer merupakan library PHP untuk mengirim email antar web server dengan aman dan mudah. Sebenernya PHP sudah menyediakan fungsi native yang mendukung untuk mengirim email yaitu fungsi mail(). Tapi, Sayalebih memilih dan sering memakai PHPMailer untuk daily coding karena konfigurasi serta penggunaannya yang mudah.
Beberapa kelebihan PHPMailer (PHPMailer github):
- Mungkin nih, mungkin ya, merupakan library paling populer untuk mengirim email lewat PHP.
- Digunakan oleh banyak proyek proyek open source, contohnya wordpress, dan drupal.
- Dukungan SMTP yang terintegrasi – artinya bisa mengirim email tanpa server (email) lokal.
- Mengirim email dengan dukungan multi TO, BCC, BC, dan REPLY TO.
- Alternatif email untuk klien email yang tidak bisa membaca HTML.
- Mendukung konten dengan encode UTF-8, 8bit, base64, binary, dan quote printable.
- Mendukung autentikasi SMTP berupa LOGIN, PLAIN, NTLM, CRAM-MD5 dan GOOGLE-XAUTH2 lewat SSL / TLS
- Pesan error yang mendukung 47 bahasa
- Kompatibel dengan PHP 5.0+.
Installasi PHPMailer
Fiturnya lumayan ok kan? Fitur – fitur di atas membutuhkan effort lebih jika ingin tetap menggunakan fungsi mail() pada PHP. Seperti contoh, fungsi mail() tidak memiliki fitur untuk autentifikasi. Kalau ingin menggunakan autentikasi (seperti LOGIN, PLAIN, ataupun XAUTH2), pengguna harus melakukan pengembangan sendiri. Oleh karena itu PHPMailer merupakan pilihan library yang tepat jika ingin mengirim email melalui PHP dengan mudah.
Untuk installasi library PHPMailer, ada dua cara. Cara pertama dapat adalahdengan bantuan composer. Sedangkan cara kedua adalah dengan mengunduh secara manual repository yang ada di Github. Untuk installasi melalui composer, berikut langkahnya:
composer require phpmailer/phpmailer
Penggunaan PHP Mailer
Jika library sudah berhasil terinstall, maka tinggal melakukan include file autoload yang biasanya terdapat di folder vendor pada bagian atas code:
composer require phpmailer/phpmailer;
require_once ('vendor/autoload.php');
Sedangkan untuk installasi dengan mengunduh manual, langkah pertama adalah melakukan ekstraksi file zip dari github. Lalu melakukan include kelas PHPMailerAutoload.php:
require_once ('PHPMailer-master/PHPMailerAutoload.php');
Jika sudah melakukan langkah di atas, langkah selanjutnya adalah melakukan konfigurasi lalu coding aplikasi mail sender sesuai dengan keinginan.
Agar bisa mengirim email, seperti mail client pada umumnya (thunderbird, outlook, dll). Maka phpmailer perlu inisialisasi. Untuk inisialisasinya, cukup memanggil kelas PHPMailer seperti berikut:
$mail = new PHPMailer();
Selanjutnya, objek $mail di atas dapat dikonfigurasi sesuai dengan keinginan. Seperti jenis autentifikasi, username dan password akun email untuk mengirim email, subjek email, alamat email tujuan, lampiran, dan lain sebagainya . Lebih lengkap tentang konfigurasi serta method apa saja yang ada di PHPMailer, bisa lihat di sini. Sebagai contoh saja, berikut ini code konfigurasi yang Sayabiasanya lakukan:
$mail->IsSMTP();
$mail->SMTPDebug = 3; //khusus untuk debugging, untuk di environment production harus di set 0 (nol)
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->AuthType = 'LOGIN';
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true )); //jika mail server yang dimiliki memiliki sertifikat tapi tak bisa diverifikasi, maka opsi berikut akan 'memaksa' PHPMailer untuk 'melewatkan' proses verifikasi sertifikat
$mail->TimeOut = 10; //timeout dalam detik
$mail->SMTPSecure = 'ssl'; // jika ingin menggunakan SSL (prefix)
$mail->Host = 'mail.servermail.com';
$mail->Port = 465; // port default untuk SMTP
$mail->Username = 'johndoe@mailserver.com'; // username yang digunakan
$mail->Password = ''; // password yang digunakan
$content = "test content"; //body (konten) dari email yang dikirim, bisa dilakukan opsi juga agar formatnya berupa HTML.
$mail->SetFrom('nobody@mailserver.com', 'Noreply Server'); // set nama pengirim dan alias
$mail->AddAddress("czaroentoro@gmail.com", "czaroentoro@gmail.com"); //alamat yang akan dikirimi email
$mail->isHtml(true); //untuk konten dengan format HTML.
$mail->Subject = "Test aja nih"; //subjek dari email yang dikirim.
$mail -> Body = $content;
try{
if (!$mail->send()) {
echo json_encode(array('status' => 'error', 'message' => "Mailer Error: " . $mail->ErrorInfo));
}
} catch (Exception $e){
echo $e;
}
Tampak banyak ya? hehe. Yeps, meski begitu konfigurasi di atas jauh lebih ringkas daripada mengirim lewat fungsi mail(). Jika konfigurasi di atas memakai fungsi mail(), maka perlu pengembangan lagi yang mungkin bisa membutuhkan baris kode lebih banyak
Konfigurasi PHPMailer
OK, selanjutnya Saya akan menjelaskan beberapa bagian kode pada konfigurasi di atas agar lebih jelas.
$mail->IsSMTP();
$mail->SMTPDebug = 3; //khusus untuk debugging, untuk di environment production harus di set 0 (nol)
Kode di atas memberitahukan bahwa Saya mau ngirim email dengan protokol SMTP (Simple Mail Transfer Protocol) . Apakah protokol SMTP itu? lebih lanjut di sini. Baris kedua memberitahukan debug level output PHPMailer, sebagai pengetahuan debug level PHPMailer ada 4, yaitu 0, 1, 2, 3. Untuk debug level 0, kita tidak dapat melihat informasi koneksi, proses autentifikasi, dan proses koneksi ke server, alias tidak dapat melakukan trace jika ada error. Level 1, akan menampilkan informasi tentang hasil akhir proses pengiriman email(pengiriman berhasil, pengiriman gagal, koneksi berhasil, koneksi gagal). Level 2, akan menampilkan informasi jika terjadi error. Sedangkan untuk level 3 akan menampilkan semua proses dari login hingga pengiriman email. Informatif bukan?
$mail->TimeOut = 10; //;timeout dalam detik
$mail->SMTPSecure = 'ssl'; // jika ingin menggunakan SSL (prefix)
Untuk kode di atas, baris pertama menunjukkan lama waktu timeout ketika mengirim email dalam detik. Jadi jika koneksi tidak dapat terjalin antara komputer pengirim dengan server dalam waktu 10 detik, maka script akan mengeluarkan error timeout. Untuk baris kedua memberitahukan bahwa SMTP mengandalkan ssl dalam proses transportasi datanya.
$mail->Host = 'mail.servermail.com';
$mail->Port = 465; // port default untuk SMTP
$mail->Username = 'johndoe@mailserver.com'; // username yang digunakan
$mail->Password = ''nobodyknow"; // password yang digunakan
Kode di atas adalah pengaturan server email yang akan dijadikan sebagai ‘pengirim’ email. Baris pertama adalah alamat host / server yang digunakan. Baris kedua merupakan port mana yang digunakan pada server (biasanya untuk SMTP akan menggunakan port 465). Sedangkan baris ketiga adalah username pada akun email untuk mengirim, dan baris terakhir merupakan password dari akun email yang terkait.
$content = "test content"; //body (konten) dari email yang dikirim, bisa dilakukan opsi juga agar formatnya berupa HTML.
$mail->SetFrom('nobody@mailserver.com', 'Noreply Server'); // set nama pengirim dan alias
$mail->AddAddress("czaroentoro@gmail.com", "czaroentoro@gmail.com"); //alamat yang akan dikirimi email
$mail->isHtml(true); //untuk konten dengan format HTML.
$mail->Subject = "Test aja nih"; //subjek dari email yang dikirim.
$mail -> Body = $content;
try{
if (!$mail->send()) {
echo json_encode(array('status' => 'error', 'message' => "Mailer Error: " . $mail->ErrorInfo));
}
} catch (Exception $e){
echo $e;
}
Untuk baris terakhir di atas, secara intuitif dapat diketahui adalah konfigrasi untuk alias pengirim, alamat yang dituju, setting konten berupa html, subjek email yang dikirim, set konten, dan yang terakhir adalah proses pengiriman email. Dan selesai, pengiriman email berhasil.