Panduan Lengkap Cara Kirim Email dengan PHP Mail dan PHPMailer
Email sudah menjadi bagian penting dari aktivitas sehari-hari, pekerjaan, bahkan bisnis. Surat-menyurat elektronik ini dilakukan di sejumlah platform, termasuk Hostinger, Zoho Mail, dan G Suite. Namun, tahukah Anda kalau Anda juga bisa kirim email dengan PHP?
Di tutorial ini, kami akan membahas dua cara mengirim email, yaitu dengan fungsi PHP mail() bawaan dan PHPMailer menggunakan Simple Mail Transfer Protocol (SMTP).
Cara Kirim Email dengan PHP mail()
Fungsi PHP mail() ditujukan untuk invoke program Sendmail. Program ini biasanya dikonfigurasi oleh administrator sistem sehingga Anda dapat mengirim email.
Agar fungsi ini dapat digunakan, Anda harus memastikan kalau provider hosting Anda memperbolehkan pengaturan layanan Sendmail secara manual.
Apabila saat ini Anda menggunakan layanan Hostinger, Anda bisa mengaktifkan atau menonaktifkan fungsi ini melalui hPanel. Klik Emails > Mail Service Control.
Secara default, layanan Sendmail telah diaktifkan. Meskipun demikian, tidak ada salahnya jika Anda mengeceknya sekali lagi.
Membuat File Tes untuk PHP Mail
Pertama-tama, buat file untuk script PHP mail, lalu simpan di direktori public_html agar dapat diakses dengan mudah menggunakan nama domain.
- Klik File Manager dan Anda akan diarahkan ke halaman khusus untuk pengaturan file.
- Buat file baru dengan meng-klik ikon tambah file baru di kanan atas layar. Untuk tutorial ini, kami akan menamai file baru tersebut dengan testmail.php. Setelah itu, klik Create.
- Klik dua kali pada folder testmail.php dan tambahkan komponen. Pada tangkapan layar di bawah ini, Anda bisa lihat contoh komponen dasar dari fungsi PHP mail() yang akan kami gunakan di tutorial ini. Kami akan menjelaskan lebih lengkap di bagian berikutnya. Klik Save & Close jika sudah selesai mengedit file baru.
- Kini Anda sudah bisa mengirim email melalui NamaDomainAnda/testmail.php di browser. Ganti NamaDomainAnda dengan domain yang Anda gunakan pada saat membuat testmail.php.
- Email yang dituju akan menerima pesan yang Anda kirimkan.
Mengenal Komponen PHP Mail
Seperti yang sudah disebutkan sebelumnya, di bagian ini kami akan membahas komponen dari script dasar PHP mail. Untuk tutorial ini, komponen yang akan kami berikan adalah sintaks dasar email. Tujuannya adalah agar Anda bisa lebih memahami fungsi yang dibahas dalam tutorial ini.
Apabila Anda menginginkan informasi yang lebih mendalam tentang fungsi Sendmail beserta komponennya, silakan kunjungi halaman resmi PHP.
Berikut sintaks PHP yang kami gunakan sebelumnya (pada tangkapan layar di atas):
<?php ini_set( 'display_errors', 1 ); error_reporting( E_ALL ); $from = "test@hostinger-tutorials.com"; $to = "test@hostinger.com"; $subject = "Checking PHP mail"; $message = "PHP mail works just fine"; $headers = "From:" . $from; mail($to,$subject,$message, $headers); echo "The email message was sent."; ?>
Kami akan menjelaskan komponen di atas satu per satu:
Dua baris pertama ini akan menampilkan notifikasi error apabila terjadi kesalahan. Dengan diaktifkannya notifikasi, Anda akan tahu kalau ada kegagalan dalam menjalankan script.
ini_set( 'display_errors', 1 ); error_reporting( E_ALL );
Baris ini memuat alamat email pengirim. Perlu Anda ketahui, sebagian besar penyedia hosting tidak memperbolehkan penambahan alamat email yang tidak jelas atau tidak dikenali karena memungkinkan terjadinya spoofing. Oleh karena itu, gunakanlah alamat email yang memang ditujukan untuk nama domain atau brand agar fungsi PHP mail dapat dijalankan.
$from = "test@hostinger-tutorials.com";
Masukkan alamat email penerima di baris ini.
$to = "test@gmail.com";
Masukkan subjek email pesan di sini.
$subject = "Checking PHP mail";
Tulis isi pesan di sini.
$message = "PHP mail works just fine";
Tambahkan informasi penting di sini, misalnya alamat pengirim, alamat untuk header Reply-To, dll.
$headers = "From:" . $from;
Baris ini untuk menjalankan fungsi PHP mail.
mail ($to,$subject,$message,$headers);
Isi pesan yang akan muncul setelah script berhasil dijalankan.
echo "The email message was sent.";
Cara Kirim Email dengan PHPMailer
PHPMailer adalah library kirim email dengan PHP yang banyak digunakan. Dengan library ini, Anda bisa mengirim email menggunakan fungsi mail() atau Simple Mail Transfer Protocol (SMTP). Proses pembuatan PHP mail yang tadinya rumit akan disederhanakan oleh PHPMailer dengan menyediakan satu set fungsi untuk membuat dan mengirimkan email.
Jika Anda sudah punya Composer, menginstall PHPMailer akan jadi lebih mudah. Di Hostinger, Composer merupakan tool bawaan yang dapat Anda temukan di semua jenis paket hosting.
Apabila Anda ingin menginstall PHPMailer dengan metode manual, buatlah koneksi ke akun hosting Anda via SSH terminal terlebih dulu. Berikut langkah-langkahnya:
- Unduh dan install PuTTY SSH client.
- Buka dashboard hPanel, cari dan klik SSH Access di bagian Advanced.
- Catat Informasi Akses SSH yang Anda temukan di sana. Nantinya Anda membutuhkan SSH IP address, SSH port, SSH username, dan SSH password.
- Buka PuTTY, lalu atur SSHP IP dan SSH port.
- Klik Open dan jendela perintah (command) akan muncul. Masukkan SSH username dan SSH password. Tekan Enter jika sudah selesai.
CATATAN: PuTTY TIDAK akan menampilkan password Anda. Jadi, Anda tidak perlu panik jika password tidak muncul di layar.
- Jalankan perintah ini:
cd public_html
- Tekan Enter dan jalankan perintah ini:
composer require phpmailer/phpmailer
- Tunggu sampai proses install selesai.
Menggunakan PHPMailer dengan Hostinger SMTP
Setelah PHPMailer berhasil diaktifkan, Anda bisa langsung menggunakannya untuk mengirimkan PHP mail dengan Hostinger SMTP.
- Masuk ke hPanel untuk buat akun email. Buka Email Accounts -> Create a New Email Account. Tambahkan alamat email baru dan buat password. Setelah itu, klik Create.
- Cek informasi SMTP di halaman yang sama:
CATATAN: Jangan sampai Anda lupa akun username, password akun, SMTP host, dan SMTP port. Informasi ini dibutuhkan untuk mengirimkan email via PHPMailer.
- Buat file testphpmailer.php di Public_html. Caranya, masuk ke dashboard hPanel dan klik File Manager.
- Klik ikon tambah file baru. Namai file tersebut dengan testphpmailer.php, lalu klik Create.
- Klik dua kali pada file testphpmailer.php. Setelah itu, salin dan letakkan perintah di bawah ini ke file tersebut:
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer; $mail->isSMTP(); $mail->SMTPDebug = 2; $mail->Host = 'smtp.hostinger.com'; $mail->Port = 587; $mail->SMTPAuth = true; $mail->Username = 'test@hostinger-tutorials.com'; $mail->Password = 'YOUR PASSWORD HERE'; $mail->setFrom('test@hostinger-tutorials.com', 'Your Name'); $mail->addReplyTo('test@hostinger-tutorials.com', 'Your Name'); $mail->addAddress('example@email.com', 'Receiver Name'); $mail->Subject = 'Testing PHPMailer'; $mail->msgHTML(file_get_contents('message.html'), __DIR__); $mail->Body = 'This is a plain text message body'; //$mail->addAttachment('test.txt'); if (!$mail->send()) { echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'The email message was sent.'; } ?>
- Ubah kode. Misalnya, ganti EMAIL_ACCOUNT_PASSWORD dengan password email Anda, ganti test@hostinger-tutorials.com dengan username Anda, ganti example@gmail.com dengan alamat email si penerima, dll. Jika semua sudah diubah, klik Save & Close.
- PHPMailer sudah bisa digunakan. Ketik NamaDomainAnda.com/testphpmailer.php di browser dan jalankan script tersebut.
Mengenal Komponen PHPMailer
Untuk memahami cara kerja PHPMailer, kami akan membahas contoh script di atas yang menggunakan SMTP untuk mengirim email. Berikut penjelasan singkat untuk setiap komponennya:
Baris ini mengimpor class PHPMailer ke global namespace.
use PHPMailer\PHPMailer\PHPMailer;
Baris ini menyertakan berbagai library yang dibutuhkan PHPMailer.
require '../vendor/autoload.php';
Semua variabel yang serupa memuat informasi penting, seperti info server, header pesan, attachment (lampiran), dan masih banyak lagi. Singkatnya, variabel ini memastikan bahwa pengirim pesan dilindungi dengan autentikasi SMTP.
$mail->
Menentukan kondisi ketika script dijalankan.
if (!$mail->send()) {
Baris ini akan menampilkan pesan error dengan tambahan informasi waktu terjadinya kegagalan pengiriman pada script.
echo 'Mailer Error: ' . $mail->ErrorInfo;
Menentukan kondisi etika script dijalankan.
} else {
Pesan ini akan muncul jika email berhasil dikirimkan.
echo 'The email message was sent!';
PRO TIP: Baris SMTPDebug = 2 hanya digunakan ketika Anda ingin mengetes script dan mengecek cara kerjanya. Jika tes sudah selesai dilakukan, ubah nilainya ke SMTPDebug = 0. Tindakan ini diharuskan agar end-user tidak melihat laporan pengiriman SMTP.
Jika dilihat dengan saksama, Anda akan tahu kalau kami melakukan sesuatu yang berbeda dari contoh pertama yang ditampilkan. Alih-alih mengirimkan teks biasa, kami mengirimkan pesan HTML.
Oleh karena itu, pesan Anda akan memuat isi dari file message.html yang berada di direktori yang sama, yaitu public_html.
Format ini memiliki fungsionalitas yang lebih luas dibandingkan dengan pesan biasa, apalagi HTML juga mudah dikutomisasikan. Anda bisa mengganti warna, gaya, gambar, dan bahkan menambahkan file multimedia yang koleksinya terbatas di pesan email biasa.
Formulir Kontak PHPMailer
Tahukah Anda kalau Anda bisa melakukan lebih dari sekadar mengirim email biasa dengan PHPMailer? Salah satu contohnya adalah membuat formulir kontak. Anda bisa membuat formulir ini dengan PHPMailer untuk menjangkau audiens di mana pun mereka berada.
Berikut contoh script-nya:
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer; $mail->isSMTP(); $mail->Host = 'smtp.hostinger.com'; $mail->Port = 587; $mail->SMTPAuth = true; $mail->Username = 'test@hostinger-tutorials.com'; $mail->Password = 'EMAIL_ACCOUNT_PASSWORD'; $mail->setFrom('test@hostinger-tutorials.com', 'Mr. Drago'); $mail->addAddress('example@gmail.com', 'Receiver Name'); if ($mail->addReplyTo($_POST['email'], $_POST['name'])) { $mail->Subject = 'PHPMailer contact form'; $mail->isHTML(false); $mail->Body = <<<EOT Email: {$_POST['email']} Name: {$_POST['name']} Message: {$_POST['message']} EOT; if (!$mail->send()) { $msg = 'Sorry, something went wrong. Please try again later.'; } else { $msg = 'Message sent! Thanks for contacting us.'; } } else { $msg = 'Share it with us!'; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Contact form</title> </head> <body> <h1>Do You Have Anything in Mind?</h1> <?php if (!empty($msg)) { echo "<h2>$msg</h2>"; } ?> <form method="POST"> <label for="name">Name: <input type="text" name="name" id="name"></label><br><br> <label for="email">Email: <input type="email" name="email" id="email"></label><br><br> <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br><br> <input type="submit" value="Send"> </form> </body> </html>
Sama seperti yang sudah-sudah, Anda pun harus membuat file baru terlebih dulu di folder public_html. Untuk contoh formulir kontak, file baru ini akan kami namai dengan formscript.php. Ubah informasi yang ada di dalam script. Setelah itu, jalankan script melalui browser.
Berikut hasilnya:
Setelah audiens menulis dan mengirimkan pesan, mereka akan menerima pesan konfirmasi. Konten pesan akan masuk ke kotak masuk dari email yang Anda tambahkan di sini:
$mail->addAddress('example@gmail.com', 'Receiver Name');
PRO TIP: Seandainya formulir kontak PHPMailer tidak berfungsi, tambahkan baris $mail->SMTPDebug = 2; untuk mengecek penyebab error. Jika sudah selesai, hapus atau ganti nilai 2 ke 0
PHPMailer menawarkan lebih banyak contoh yang bisa Anda coba di repositori resmi GitHub. Jika Anda menggunakan WordPress, Anda bisa membuat formulir kontak dengan menginstall plugin, seperti WP Forms, Formidable, Forms, atau Gravity Forms.
Mengatasi Error yang Sering Terjadi di PHP Mail dan PHPMailer
Error bisa saja terjadi ketika Anda kirim email dengan PHP mail atau PHPMailer. Berikut beberapa kendala atau error yang sering terjadi beserta tips untuk mengatasinya.
Sender Address Rejected: Not Owned by the User
Error ini menandakan bahwa server tidak bisa melakukan autentikasi menggunakan informasi yang tersedia.
Untuk mengatasinya, cek kembali alamat email yang Anda gunakan untuk mengirim pesan. Pastikan alamat email tersebut aktif dan sesuai dengan kontak email yang ada. Apabila tidak sesuai, segera ubah dan ganti dengan alamat yang benar. Pastikan juga Anda sudah mengaktifkan SPF record.
Gmail Tidak Dapat Memverifikasi Bahwa NamaDomainAnda.com yang Mengirimkan Pesan Ini
Ketika Anda sedang mengetes script PHP mail dan peringatan ini muncul, penyebabnya bisa jadi salah satu di bawah ini:
- SPF record belum diaktifkan.
- Email dikirimkan dari alamat yang tidak ada atau bukan alamat Anda. Pastikan untuk memakai informasi autentikasi SMTP yang valid.
Pesan Masuk ke Folder Spam
Ada banyak hal yang mengakibatkan PHP mail dianggap sebagai spam, di antaranya adalah:
- Subjek yang tidak jelas atau diduga sebagai spam. Contohnya seperti “test”, atau “testing”, “hello”, “urgent”, atau sejenisnya. Buatlah subjek pesan sejelas-jelasnya.
- Anda memasukkan alamat pengirim yang salah. Sistem keamanan akan aktif dan email Anda disaring sebagai tindakan pencegahan terhadap email spoofing dan scam.
- Anda menggunakan kata-kata yang memicu spam. Kata atau frasa yang dikategorikan sebagai spam, seperti “great offer” (penawaran terbaik), “click here” (klik di sini), “special promotion” (promo spesial), “this is not spam” (bukan spam), dan lain sebagainya. Disarankan untuk mengubah isi pesan jika ada kata-kata yang dapat mengakibatkan email Anda terdeteksi sebagai spam.
- Anda tidak melengkapi mailing list dengan tombol unsubscribe (berhenti berlangganan). Karena tidak adanya tombol ini, audiens akan melaporkan pesan email Anda sebagai spam. Oleh karena itu, sangat penting bagi Anda untuk selalu menambahkan tombol unsubscribe. Keberadaan tombol ini juga meningkatkan kadar kepercayaan audiens terhadap Anda.
Kesimpulan
Sekarang Anda sudah tahu cara kirim email dengan PHP dan cara menggunakan PHPMailer untuk mengirimkan email dengan autentikasi SMTP. Meskipun tutorial ini hanya memberikan sintaks dan komponen dasar, sintaks yang sama dapat Anda gunakan untuk membuat formulir kontak atau ekstensi lainnya di website.
Untuk informasi selengkapnya, silakan cek halaman PHPMailer project. Jika Anda punya tips atau ide yang ingin dibagikan, jangan ragu untuk menuliskannya pada kolom komentar di bawah ini!