Mengirim email dengan PHPMailer

Assalamualaikum!

Halo gaes, bertemu lagi dengan ane, coder coro, xixix. Kali ini ane mau berbagi pengalaman (tutorial) tentang pengiriman e-mail lewat script PHP dengan bantuan library PHPMailer. Sebenernya PHP sudah menyediakan fungsi native yang mendukung untuk mengirim email yaitu fungsi mail().  Tapi, ane lebih memilih dan sering memakai PHPMailer untuk daily coding karena konfigurasi serta penggunaannya yang mudah.

PHPMailer
PHPMailer

Nih, beberapa kelebihan PHPMailer (diambil dari situs: 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+.

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, dapat dilakukan dengan dua cara. Cara pertama dapat dilakukan dengan bantuan composer. Sedangkan cara kedua adalah dengan mengunduh secara manual repository yang ada di Github. Untuk installasi melalui composer, dapat dilakukan dengan cara sebagai berikut:

<em>composer require phpmailer/phpmailer</em>

Jika library sudah berhasil diunduh, maka tinggal melakukan include file autoload yang biasanya terdapat di folder vendor pada source code yang dibuat:


<em>require_once ('vendor/autoload.php');</em>

Sedangkan untuk installasi dengan mengunduh manual, langkah pertama adalah melakukan ekstraksi file yang diunduh (karena biasanya berbentuk file terkompresi / zip). Lalu melakukan include kelas PHPMailerAutoload.php:


<em>require_once ('PHPMailer-master/PHPMailerAutoload.php');</em>

Jika sudah melakukan langkah di atas, langkah selanjutnya adalah melakukan konfigurasi dilanjut dengan coding aplikasi mail sender sesuai dengan keinginan.

include file autoload composer
include file autoload composer

Agar bisa mengirim email, seperti mail client pada umumnya (thunderbird, outlook, dll). Maka phpmailer perlu diinisialisasi dan dikonfigurasi terlebih dahulu. Untuk inisialisasinya, cukup memanggil kelas PHPMailer seperti berikut:


<em>$mail = new PHPMailer();</em>

Selanjutnya, objek $mail di atas dapat dikonfigurasi sesuai dengan keinginan, seperti contohnya jenis autentifikasi yang dibutuhkan, username dan password akun email yang digunakan untuk mengirim email, subjek email, alamat yang dituju, attachment yang ingin dilampirkan, dan lain sebagainya . Lebih lengkap tentang konfigurasi serta method apa saja yang disediakan oleh PHPMailer, dapat disediakan di sini. Sebagai contoh saja, berikut ini code konfigurasi yang ane biasanya 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; //<em>timeout dalam detik</em>

$mail->SMTPSecure = 'ssl';  // <i>jika ingin menggunakan SSL (prefix)</i>

$mail->Host = 'mail.servermail.com';

$mail->Port = 465;                   // <em>port default untuk SMTP</em>

$mail->Username = 'johndoe@mailserver.com';  // <em>username yang digunakan</em>

$mail->Password = '';            // <em>password yang digunakan</em>

$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 dibandingkan dengan mengirim lewat fungsi mail(). Jika konfigurasi di atas diimplementasikan dengan fungsi mail(), maka diperlukan pengembangan lagi yang mungkin bisa  membutuhkan ratursan baris kode :P.

OK, selanjutnya ane 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 ane mau ngirim email dengan protokol SMTP (Simple Mail Transfer Protocol) . Apakah protokol SMTP itu? bisa dibaca di sini. Baris kedua memberitahukan debug level yang akan dikeluarkan oleh 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. Untuk debug level 1, akan menampilkan informasi tentang hasil akhir proses pengiriman email(pengiriman berhasil, pengiriman gagal, koneksi berhasil, koneksi gagal). Untuk debug level 2, akan ditampilkan informasi jika terjadi error. Sedangkan untuk level 3 akan ditampilkan semua proses dari login hingga pengiriman email yang dilakukan oleh PHPMailer. Informatif bukan?

Contoh penggunaan debug level 3 PHPMailer
Contoh penggunaan debug level 3 PHPMailer

$mail->TimeOut = 10; //<em>timeout dalam detik</em>

$mail->SMTPSecure = 'ssl';  // <i>jika ingin menggunakan SSL (prefix)</i>

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;                   // <em>port default untuk SMTP</em>

$mail->Username = 'johndoe@mailserver.com';  // <em>username yang digunakan</em>

$mail->Password = ''nobodyknow";            // <em>password yang digunakan</em>

 

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). Baris ketiga merupakan username pada akun email yang digunakan 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.

Pengiriman berhasil, ups masuk spam, hehe
Pengiriman berhasil, ups masuk spam, hehe

Gimana? mudah kan pakai PHPMailer? hehe. Segitu aja sharing kali ini dari ane, sampai ketemu di lain waktu, see you next time!

Wassalamualikum!

 

Programming

Iklan

caisaroentoro View All →

simple, script, balance

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogger menyukai ini: