Cara mengirim email dari web server menggunakan PHP mail() dan PHPMailer

Cara mengirim email dari web server menggunakan PHP mail() dan PHPMailer

Sebagian besar perusahaan memiliki akun email profesional untuk membangun kepercayaan pelanggan. Untuk membuat email tersebut, Anda perlu membeli nama domain dan menyiapkan email bisnis pada klien email atau server Anda.

Apabila memiliki website atau aplikasi web yang dibuat dengan PHP, Anda bisa mengirim email langsung dari web server Anda. Dengan PHP mail, Anda bisa membuat formulir email sendiri dan mengirim email berbasis teks dasar ke beberapa penerima.

Ada dua cara untuk mengirim email dalam PHP: menggunakan fungsi PHP mail() bawaan, atau library pengiriman email seperti PHPMailer.

Di artikel ini, kita akan membahas perbedaan PHPMailer dan fungsi mail(), serta menunjukkan cara mengirim email menggunakan keduanya.

PHP mail adalah fungsi untuk mengirim email menggunakan skrip PHP. Fungsi PHP bawaan ini bisa menargetkan beberapa penerima per pengiriman email. Namun, metode ini tidak bisa mengirim email secara massal tanpa menggunakan paket PHP mail eksternal seperti PHPMailer.

Kelebihan dan kekurangan PHPMailer vs fungsi mail()

Menggunakan PHP mail, administrator website berbasis PHP bisa mengirim email dari web servernya sendiri menggunakan skrip PHP. Fungsi ini populer digunakan sebagai alternatif layanan email hosting eksternal karena terintegrasi dengan web server.

Untuk mengirim email dalam PHP, Anda bisa menggunakan fungsi mail() PHP native atau paket mailing PHP eksternal seperti PHPMailer. Berikut adalah penjelasan singkat tentang setiap metode tersebut, termasuk kelebihan dan kekurangannya:

Fungsi PHP mail()

mail() adalah fungsi PHP yang menggunakan skrip PHP untuk mengirim email sederhana. Fungsi mail mencakup tiga parameter wajib: $to, $subject, dan $message. Parameter opsional yang bisa digunakan termasuk $headers dan $parameters. Kita akan mempelajarinya secara lebih mendetail nanti.

Fungsi PHP bawaan ini menghasilkan nilai boolean ketika dijalankan, TRUE kalau server berhasil menerima email untuk dikirim, atau FALSE kalau gagal.

Kelebihan:

  • Sudah terinstal dan siap digunakan, Anda hanya membutuhkan PHP.
  • Kompatibel dengan versi lama. Perubahan versi PHP tidak akan merusak skrip yang sudah ada.
  • Mudah dipelajari.

Kekurangan:

  • Metode pengiriman emailnya sudah ketinggalan zaman, tanpa dukungan bawaan untuk autentikasi modern seperti SPF dan DKIM.
  • Sering masuk ke folder spam atau sampah karena konfigurasi yang tidak tepat dan tidak adanya autentikasi.
  • Membutuhkan setup yang rumit untuk SMTP, meningkatkan kemungkinan terpicunya filter spam.
  • Tidak bisa menangani email dalam jumlah besar secara efektif.
  • Memiliki batas pengiriman yang lebih rendah dan kurang terjamin dibandingkan dengan PHPMailer.
  • Menghasilkan nilai TRUE meskipun email gagal sampai ke penerima.

Penting! Bagi klien Hostinger, perlu diingat bahwa batas email yang bisa dikirim melalui PHP mail() saat ini adalah 100/hari dan 10/menit. Batas ini akan diatur ulang setiap 24 jam dan akan segera digunakan kalau ada email dalam antrean.

PHPMailer

PHPMailer adalah library pengiriman email populer yang mendukung pengiriman email melalui fungsi mail() atau server Simple Mail Transfer Protocol (SMTP). Library ini menyediakan akses ke serangkaian fungsi untuk mengirim email sehingga mempermudah konfigurasi PHP mail manual.

Keunggulan:

  • Mengirim email melalui koneksi yang aman dengan autentikasi SPF dan DKIM sehingga email lebih mungkin diterima di kotak masuk.
  • Mempermudah konfigurasi email dan mendukung fitur-fitur canggih seperti body HTML dan lampiran.
  • Mendukung SMTP dengan enkripsi SSL dan TLS yang terintegrasi.
  • Mampu menangani email dalam jumlah besar secara efisien dalam waktu singkat.

Kekurangan:

  • Memerlukan penginstalan manual melalui SSH.
  • Ada biaya tambahan pada paket web hosting Single Hostinger karena tidak adanya akses SSH.
  • Lebih sulit dipelajari dibandingkan dengan fungsi mail() bawaan.

Penting! Apabila Anda menggunakan PHPMailer dengan Titan Mail di Hostinger, batas pengirimannya adalah 1000 email/hari dan 300 email/jam. Untuk layanan email Hostinger, batasnya lebih tinggi, yaitu hingga 3000 email/hari tanpa batas per jam. Cek parameter dan batas untuk setiap layanan karena akan berbeda-beda tergantung pada paket hosting Anda.

Cara menggunakan PHPMailer untuk mengirim email

Di bagian ini, kita akan mempelajari cara mengirim email menggunakan PHPMailer. Sebaiknya gunakan koneksi SMTP yang diautentikasi dengan PHPMailer untuk mengoptimalkan pengiriman email Anda agar tidak terkena filter spam.

Menginstal PHPMailer

Cara menginstal PHPMailer pada dasarnya cukup mudah, terutama kalau menggunakan Composer.

Perlu diperhatikan bahwa paket web hosting Premium dan Business serta opsi cloud hosting di Hostinger sudah menyertakan dua versi Composer.

Gunakan perintah composer untuk mengaktifkan Composer versi 1.10. Apabila Anda memerlukan versi 2.0 yang baru atau menggunakan PHP versi 8.0 atau yang lebih baru, jalankan perintah composer2.

Instal PHPMailer menggunakan Composer melalui SSH agar berjalan dengan baik. Anda tidak bisa menambahkan phpmailer.php dengan kode SMTP tanpa penginstalan yang tepat. Tenang, kita akan membahasnya nanti dalam panduan ini.

Ikuti langkah-langkah berikut untuk menginstal PHPMailer secara manual:

  1. Dari dashboard hPanel Anda, buka Tingkat LanjutSSH Access, lalu catat alamat IP, port, username, dan password yang ada di bagian Detail SSH.
  2. Buka PuTTY dan masukkan informasi SSH Anda pada kolom Hostname (atau alamat IP) dan Port. Kemudian, klik Buka.
  3. Setelah jendela perintah muncul, ketik username dan password SSH Anda, lalu tekan Enter. Perlu diingat bahwa PuTTY tidak akan menampilkan password, jadi jangan kaget kalau password Anda tidak muncul di layar.
  4. Jalankan perintah berikut untuk membuka direktori public_html:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cd public_html
cd public_html
cd public_html
  1. Jalankan perintah berikut untuk menginstal PHPMailer:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer2 require phpmailer/phpmailer
composer2 require phpmailer/phpmailer
composer2 require phpmailer/phpmailer
  1. Tunggu beberapa saat sampai proses penginstalan selesai. Tampilannya akan seperti berikut:

Saran bacaan

Simak tutorial kami tentang perintah SSH untuk membantu Anda mengelola server secara lebih optimal.

Memahami komponen PHPMailer

Untuk memahami cara kerja PHPMailer, mari pelajari setiap komponen skrip di atas.

  • use PHPMailer\PHPMailer\PHPMailer; – mengimpor class PHPMailer ke namespace global.
  • require ‘../vendor/autoload.php’; – menyertakan berbagai library yang dibutuhkan PHPMailer.
  • $mail = new PHPMailer; – membuat objek PHPMailer baru.
  • $mail->isSMTP(); – memberi tahu class PHPMailer untuk menggunakan konfigurasi SMTP khusus yang ditentukan dalam skrip, bukan di server email lokal.
  • $mail->SMTPDebug = 2; – mendeteksi error kalau ada yang salah dengan koneksi SMTP.
  • $mail->Host = ‘smtp.hostinger.com’; – di sinilah alamat server SMTP harus ditentukan.
  • $mail->Port = 587; – atur port SMTP di sini. Kita akan memilih port SMTP 587 sebagai port pengiriman email default untuk semua jenis transmisi data SMTP.
  • $mail->SMTPAuth = true; – mengaktifkan autentikasi SMTP.
  • $mail->Username = ‘mymail@myawesomedomain.tld’; – tentukan alamat email Anda di sini.
  • $mail->Password = ‘My$tr0ngPa55w0rd!; – masukkan password email Anda di sini.
  • $mail->setFrom(‘mymail@myawesomedomain.tld’, ‘Your Name’); – di sinilah Anda memasukkan alamat email pengirim.
  • $mail->addReplyTo(‘mymail@myawesomedomain.tld’, ‘Your Name’); – memberi tahu penerima tentang alamat yang perlu digunakan untuk membalas pesan.
  • $mail->addAddress(‘recipient@domain.tld’, ‘Receiver Name’); – masukkan alamat penerima di sini.
  • $mail->Subject = ‘Checking if PHPMailer works’; – tambahkan subjek email di sini.
  • $mail->msgHTML(file_get_contents(‘message.html’), __DIR__); – membaca isi pesan HTML dari file eksternal. Fungsi file_get_contents() akan memuat konten dari message.html, yaitu file lokal yang terletak di direktori public_html, lalu menyertakannya dalam pesan.
  • $mail->Body = ‘This is just a plain text message body’; – memuat isi pesan email.
  • //$mail->addAttachment(‘attachment.txt’); – kalau Anda ingin menyertakan lampiran, tambahkan nama filenya dan hapus garis miring ganda dari pernyataan ini.
  • if (!$mail->send()) { – menentukan tindakan yang terjadi saat skrip dijalankan.
  • echo ‘Mailer Error:’. $mail->ErrorInfo; – Anda akan melihat pesan error beserta detailnya kalau skrip gagal dikirim.
  • } else { – memperluas pernyataan if dan menjelaskan tindakan yang terjadi kalau kondisi sebelumnya tidak terpenuhi.
  • echo ‘The email message was sent!’; – menandakan proses pengiriman email berhasil.

Tips berguna

Baris SMTPDebug = 2; hanya bisa digunakan ketika Anda menguji skrip dan ingin melihat cara kerja skrip tersebut. Jangan lupa mengubahnya menjadi SMTPDebug = 0; setelah selesai melakukan pengujian untuk mencegah penerima mendapatkan laporan pengiriman protokol SMTP.

Menggunakan PHPMailer dengan SMTP Hostinger

Setelah menginstal PHPMailer, Anda bisa mulai mengirim email dalam PHP. Bagian ini akan menjelaskan cara mengirim email melalui server SMTP Hostinger menggunakan PHPMailer.

Untuk melakukannya, ikuti langkah-langkah di bawah ini:

  1. Buat akun email domain dengan mengakses hPanel, lalu buka Email Akun EmailBuat akun email.
  2. Isi alamat email baru dan password Anda. Setelah itu, klik Buat. Ingat informasi ini karena Anda akan membutuhkannya untuk mengirim email melalui PHPMailer.
  3. Dari halaman yang sama, buka Pengaturan KonfigurasiKonfigurasi Manual, lalu catat Port SMTP dan Hostname yang ditampilkan.
  4. Akses dashboard hPanel dan buka FileFile Manager. Klik folder public_html dan pilih Tambah Baru untuk membuat file baru. Beri nama file tersebut dengan phpmailer.php, lalu klik Buat.
  5. Klik dua kali file phpmailer.php, lalu salin dan tempelkan kode di bawah ini setelah membuat semua perubahan yang diperlukan. Pastikan untuk mengganti mymail@myawesomedomain.tld dan recipient@domain.tld dengan nama domain Anda, lalu My$tr0ngPa55w0rd! dengan password email Anda.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.hostinger.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = 'mymail@myawesomedomain.tld';
$mail->Password = 'My$tr0ngPa55w0rd!';
$mail->setFrom('mymail@myawesomedomain.tld', 'Your Name');
$mail->addReplyTo('mymail@myawesomedomain.tld', 'Your Name');
$mail->addAddress('recipient@domain.tld', 'Receiver Name');
$mail->Subject = 'Checking if PHPMailer works';
$mail->msgHTML(file_get_contents('message.html'), __DIR__);
$mail->Body = 'This is just a plain text message body';
//$mail->addAttachment('attachment.txt');
if (!$mail->send()) {
echo 'Mailer Error:'. $mail->ErrorInfo;
} else {
echo 'The email message was sent.';
}
?>
<?php require 'vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; $mail = new PHPMailer; $mail->isSMTP(); $mail->SMTPDebug = 2; $mail->Host = 'smtp.hostinger.com'; $mail->Port = 587; $mail->SMTPAuth = true; $mail->Username = 'mymail@myawesomedomain.tld'; $mail->Password = 'My$tr0ngPa55w0rd!'; $mail->setFrom('mymail@myawesomedomain.tld', 'Your Name'); $mail->addReplyTo('mymail@myawesomedomain.tld', 'Your Name'); $mail->addAddress('recipient@domain.tld', 'Receiver Name'); $mail->Subject = 'Checking if PHPMailer works'; $mail->msgHTML(file_get_contents('message.html'), __DIR__); $mail->Body = 'This is just a plain text message body'; //$mail->addAttachment('attachment.txt'); if (!$mail->send()) { echo 'Mailer Error:'. $mail->ErrorInfo; } else { echo 'The email message was sent.'; } ?>
<?php
require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.hostinger.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = 'mymail@myawesomedomain.tld';
$mail->Password = 'My$tr0ngPa55w0rd!';
$mail->setFrom('mymail@myawesomedomain.tld', 'Your Name');
$mail->addReplyTo('mymail@myawesomedomain.tld', 'Your Name');
$mail->addAddress('recipient@domain.tld', 'Receiver Name');
$mail->Subject = 'Checking if PHPMailer works';
$mail->msgHTML(file_get_contents('message.html'), __DIR__);
$mail->Body = 'This is just a plain text message body';
//$mail->addAttachment('attachment.txt');
if (!$mail->send()) {
echo 'Mailer Error:'. $mail->ErrorInfo;
} else {
echo 'The email message was sent.';
}
?>
  1. Setelah mengedit kode, klik Simpan & Tutup. Untuk menjalankan skrip tersebut, masukkan domainanda.tld/phpmailer.php di web browser.

Mengonfigurasi Titan SMTP

Apabila Anda menggunakan Titan Mail, buat koneksi melalui port 465 (SSL) atau 587 (STARTTLS). Buka EmailKonfigurasi Aplikasi Desktop untuk melihat informasi konfigurasi akun email Anda. Selain itu, Anda bisa membaca tutorial resmi Titan untuk mendapatkan informasi pengaturan SMTP, IMAP, atau POP yang benar.

Membuat formulir kontak PHPMailer

Selain mengirim PHP mail sederhana, Anda juga bisa menggunakan PHPMailer untuk membuat berbagai formulir kontak, seperti survei masukan.

Seperti skrip PHP sebelumnya, buat file PHP baru di folder public_html dan beri nama formscript.php. Salin dan tempelkan skrip di bawah ini ke file baru tersebut dan ubah nilainya sesuai kebutuhan:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
use PHPMailer\PHPMailer\PHPMailer;
$msg = '';
if (array_key_exists('email', $_POST)) {
require 'vendor/autoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.hostinger.com';
$mail->Port = 587;
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->Username = 'mymail@myawesomedomain.tld';
$mail->Password = 'My$tr0ngPa55w0rd!';
$mail->setFrom('mymail@myawesomedomain.tld', 'Mr. Snuffles');
$mail->addAddress('recipient@domain.tld', '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>Contact us</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>
<label for="email">Email address: <input type="email" name="email" id="email"></label><br>
<label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br>
<input type="submit" value="Send">
</form>
</body>
</html>
<?php use PHPMailer\PHPMailer\PHPMailer; $msg = ''; if (array_key_exists('email', $_POST)) { require 'vendor/autoload.php'; $mail = new PHPMailer; $mail->isSMTP(); $mail->Host = 'smtp.hostinger.com'; $mail->Port = 587; $mail->SMTPDebug = 0; $mail->SMTPAuth = true; $mail->Username = 'mymail@myawesomedomain.tld'; $mail->Password = 'My$tr0ngPa55w0rd!'; $mail->setFrom('mymail@myawesomedomain.tld', 'Mr. Snuffles'); $mail->addAddress('recipient@domain.tld', '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>Contact us</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> <label for="email">Email address: <input type="email" name="email" id="email"></label><br> <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br> <input type="submit" value="Send"> </form> </body> </html>
<?php
use PHPMailer\PHPMailer\PHPMailer;
$msg = '';
if (array_key_exists('email', $_POST)) {
require 'vendor/autoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.hostinger.com';
$mail->Port = 587;
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->Username = 'mymail@myawesomedomain.tld';
$mail->Password = 'My$tr0ngPa55w0rd!';
$mail->setFrom('mymail@myawesomedomain.tld', 'Mr. Snuffles');
$mail->addAddress('recipient@domain.tld', '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>Contact us</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>
<label for="email">Email address: <input type="email" name="email" id="email"></label><br>
<label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br>
<input type="submit" value="Send">
</form>
</body>
</html>

Tips berguna

Tidak disarankan untuk mengambil input pengguna dari $_POST tanpa pengamanan karena bisa meningkatkan risiko serangan cross-site scripting (XSS). Guna mencegahnya, simak tips terbaik untuk mengamankan variabel PHP.

Simpan perubahan dan jalankan skrip tersebut dari web browser.

Seperti inilah hasilnya nanti:

Apabila pengunjung mengirimkan pesan melalui formulir tersebut, mereka akan mendapatkan konfirmasi. Konten formulir akan dikirim ke alamat email yang Anda masukkan di sini:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$mail->addAddress('recipient@domain.tld', 'Receiver Name');
$mail->addAddress('recipient@domain.tld', 'Receiver Name');
$mail->addAddress('recipient@domain.tld', 'Receiver Name');

Tips berguna

Apabila formulir kontak PHPMailer tidak berfungsi, ubah baris $mail->SMTPDebug = 0; menjadi $mail->SMTPDebug = 2 untuk mencari tahu penyebabnya. Jangan lupa untuk menghapus baris tersebut atau mengubah angka 2 menjadi 0 setelahnya.

Kunjungi repositori resmi PHPMailer di GitHub untuk melihat contoh-contoh lain tentang cara menggunakan library pengiriman email ini.

Kalau menggunakan WordPress, Anda bisa membuat formulir dengan lebih mudah menggunakan plugin contact form seperti Formidable Forms, Contact Form 7, atau WPForms.

Cara mengirim email menggunakan PHP mail()

Cara berikutnya untuk mengirim email dari PHP secara langsung adalah dengan menggunakan fungsi mail() bawaan.

Untuk menggunakan fitur ini, pengguna yang menghosting aplikasi atau website PHP di server lokal harus mengonfigurasi program Sendmail dengan mengubah file php.ini di folder penginstalan PHP.

Apabila Anda menggunakan server hosting, Sendmail biasanya sudah dikonfigurasikan secara default. Namun, pastikan lagi bahwa provider hosting Anda mengizinkan Anda untuk mengelola opsi layanan Sendmail secara manual.

Secara default, layanan Sendmail sudah diaktifkan. Meski begitu, sebaiknya Anda mengeceknya ulang untuk memastikannya.

Penting! Titan Mail mengaktifkan fungsi PHP mail() secara default. Oleh karena itu, Anda tidak bisa mengaktifkan atau menonaktifkannya di hPanel.

Memahami komponen PHP mail

Untuk membantu Anda memahami fungsi mail() PHP, kita akan mempelajari komponen-komponen skrip PHP yang digunakan di bagian sebelumnya.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
ini_set( 'display_errors', 1 ); error_reporting( E_ALL );
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

Dua baris pertama di atas mengaktifkan pelaporan error untuk memberi tahu Anda apabila skrip PHP gagal dijalankan.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$from = "mymail@myawesomedomain.tld";
$from = "mymail@myawesomedomain.tld";
$from = "mymail@myawesomedomain.tld";

Baris ini berisi alamat email pengirim. Sebagian besar provider hosting melarang penambahan alamat email acak di bagian ini karena risiko spoofing. Jadi, sebaiknya gunakan domain yang sama dengan nama domain Anda agar skrip berhasil dijalankan.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$to = "recipient@domain.tld";
$to = "recipient@domain.tld";
$to = "recipient@domain.tld";

Alamat email penerima ada di sini. Pisahkan alamat email dengan tanda koma kalau Anda ingin mengirim beberapa email.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$subject = "Checking PHP mail";
$subject = "Checking PHP mail";
$subject = "Checking PHP mail";

Masukkan baris subjek email di sini.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$message = "PHP mail works just fine";
$message = "PHP mail works just fine";
$message = "PHP mail works just fine";

Di sini, masukkan isi pesan email Anda.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$headers = "From:" . $from;
$headers = "From:" . $from;
$headers = "From:" . $from;

Baris ini biasanya menyertakan header tambahan, seperti Dari, Balas-Ke, dan Cc. Anda bisa memisahkannya dengan CRLF.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
if (mail ($to,$subject,$message,$headers))
if (mail ($to,$subject,$message,$headers))
if (mail ($to,$subject,$message,$headers))

Skrip ini menjalankan fungsi mail() dan memeriksa apakah fungsi tersebut berhasil dijalankan.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
echo "The email message was sent.";
echo "The email message was sent.";
echo "The email message was sent.";

Pesan di atas akan muncul kalau fungsi mail() berhasil dijalankan.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
echo "The email message was not sent.";
echo "The email message was not sent.";
echo "The email message was not sent.";

Sebagai alternatif, Anda akan melihat pesan ini kalau fungsi mail() gagal.

Meskipun header tambahan bersifat opsional, penting untuk menyertakan header Dariketika Anda mengirim email. Kalau tidak, Anda akan menerima notifikasi seperti ini:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing.
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing.
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing.

Untuk mendapatkan informasi selengkapnya tentang fungsi Sendmail dan parameternya, silakan baca dokumentasi resmi PHP.

Membuat file uji coba untuk PHP mail

Setelah memastikan Sendmail sudah aktif, buat file PHP mail di dalam direktori public_html.

Berikut cara melakukannya:

  1. Dari hPanel, buka File File Manager untuk mengakses File Manager Hostinger.
  2. Klik dua kali folder public_html dan pilih ikon File Baru di bagian atas. Beri nama file baru ini dengan testmail.php, lalu klik Buat.
  3. Klik dua kali testmail.php untuk mengeditnya. Anda bisa menggunakan kode PHP dasar di bawah ini, tapi jangan lupa untuk mengubah parameternya:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "mymail@myawesomedomain.tld";
$to = "recipient@domain.tld";
$subject = "Checking PHP mail";
$message = "PHP mail works just fine";
$headers = "From:" . $from;
if(mail($to,$subject,$message, $headers)) {
echo "The email message was sent.";
} else {
echo "The email message was not sent.";
}
?>
<?php ini_set( 'display_errors', 1 ); error_reporting( E_ALL ); $from = "mymail@myawesomedomain.tld"; $to = "recipient@domain.tld"; $subject = "Checking PHP mail"; $message = "PHP mail works just fine"; $headers = "From:" . $from; if(mail($to,$subject,$message, $headers)) { echo "The email message was sent."; } else { echo "The email message was not sent."; } ?>
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "mymail@myawesomedomain.tld";
$to = "recipient@domain.tld";
$subject = "Checking PHP mail";
$message = "PHP mail works just fine";
$headers = "From:" . $from;
if(mail($to,$subject,$message, $headers)) {
echo "The email message was sent.";
} else {
echo "The email message was not sent.";
}
?>
  1. Klik Simpan & Tutup setelah selesai.
  2. Kirim email dengan mengakses domainanda.tld/testmail.php dari web browser. Jangan lupa untuk mengganti “yourdomain.tld” dengan domain yang digunakan saat membuat testmail.php.

Mengirim email HTML dengan PHP

Fungsi PHP mail() juga bisa mengirim email HTML. Format ini bisa dikustomisasi dalam lebih banyak cara dibandingkan dengan pesan teks biasa.

Proses mengirim email HTML juga tidak jauh berbeda, Anda hanya perlu menyertakan pesan HTML dan header parameter tambahan.

Berikut contoh skrip dasar untuk mengirim email HTML:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "mymail@myawesomedomain.tld";
$to = "recipient@domain.tld";
$subject = "Checking PHP mail";
$message = "
<html>
<head>
<title>This is a test HTML email</title>
</head>
<body>
<p>Hi, it's a test email. Please ignore.</p>
</body>
</html>
";
// The content-type header must be set when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers = "From:" . $from;
if(mail($to,$subject,$message, $headers)) {
echo "Message was sent.";
} else {
echo "Message was not sent.";
}
?>
<?php ini_set( 'display_errors', 1 ); error_reporting( E_ALL ); $from = "mymail@myawesomedomain.tld"; $to = "recipient@domain.tld"; $subject = "Checking PHP mail"; $message = " <html> <head> <title>This is a test HTML email</title> </head> <body> <p>Hi, it's a test email. Please ignore.</p> </body> </html> "; // The content-type header must be set when sending HTML email $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; $headers = "From:" . $from; if(mail($to,$subject,$message, $headers)) { echo "Message was sent."; } else { echo "Message was not sent."; } ?>
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "mymail@myawesomedomain.tld";
$to = "recipient@domain.tld";
$subject = "Checking PHP mail";
$message = "
<html>
<head>
<title>This is a test HTML email</title>
</head>
<body>
<p>Hi, it's a test email. Please ignore.</p>
</body>
</html>
";
// The content-type header must be set when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers = "From:" . $from;
if(mail($to,$subject,$message, $headers)) {
echo "Message was sent.";
} else {
echo "Message was not sent.";
}
?>

Error umum PHP mail dan PHPMailer beserta solusinya

Kali ini, kita akan mempelajari beberapa masalah yang paling umum ketika menggunakan fungsi PHP mail() atau PHPMailer beserta cara memperbaikinya.

Sender address rejected: not owned by the user

Error ini berarti server tidak bisa mengautentikasi pengirim menggunakan informasi yang diberikan. Untuk mengatasinya, periksa alamat email yang Anda gunakan untuk mengirim pesan, dan pastikan alamat email tersebut sesuai dengan alamat email yang ada.

Selain itu, pastikan Sender Policy Framework (SPF) Anda diaktifkan. Apabila menggunakan Hostinger, cek SPF record Anda melalui hPanel dengan membuka bagian Email Akun Email AndaHubungkan DomainLindungi reputasi email Anda.

Apabila SPF record diaktifkan, statusnya akan ditampilkan sebagai Terhubung.

Gmail couldn’t verify that domain.tld sent this message

Apabila Anda melihat peringatan ini saat menguji skrip PHP mail, penyebabnya mungkin salah satu dari yang berikut ini:

  • Tidak ada SPF record di DNS Zone domain – kalau record tidak ada atau Anda menggunakan nameserver eksternal, tambahkan TXT SPF record baru secara manual melalui hPanel atau cPanel.
  • Anda menggunakan informasi autentikasi SMTP yang tidak valid – pastikan untuk menggunakan alamat email yang ada dan milik Anda sendiri.

Email masuk ke folder spam

Ada berbagai alasan PHP mail bisa memicu filter spam. Beberapa penyebab yang paling umum termasuk:

  • Subjek yang melenceng atau seperti spam – biasanya terjadi ketika Anda menggunakan istilah seperti “tes” atau “urgent.” Pastikan untuk menjelaskan maksud Anda dengan benar di baris Subjek.
  • Alamat pengirim yang salah – menambahkan alamat yang salah bisa memicu mekanisme keamanan untuk memfilter email Anda guna mencegah penipuan dan pemalsuan.
  • Menggunakan kata-kata pemicu spam – hapus kata-kata pemicu spam, seperti “penawaran menarik” dan “ini bukan spam” dari pesan Anda untuk meningkatkan kredibilitas email.
  • Milis Anda tidak memiliki link berhenti berlangganan – pastikan untuk menyertakan tombol berhenti berlangganan (unsubscribe) untuk mencegah email masuk spam dan membangun kepercayaan penerima.

Tidak bisa tersambung ke host SMTP

Versi PHP yang lebih baru biasanya memiliki prosedur SSL yang lebih ketat. Apabila fungsi PHP mail() gagal dijalankan setelah Anda mengupdate PHP ke versi terbaru, penyebabnya mungkin justru update tersebut.

Menggunakan PHPMailer dengan beberapa provider hosting juga biasanya memicu kesalahan kode ini.

Sebagai contoh, menurut wiki PHPMailer, GoDaddy memblokir koneksi SMTP keluar melalui port 25, 465, dan 587 ke server pihak ketiga seperti Gmail dan Hotmail, kecuali server mereka sendiri. Selain itu, integrasi dengan server SMTP pihak ketiga juga tidak didukung.

Gunakan skrip berikut untuk mengatasi error ini:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );
$mail->SMTPOptions = array( 
'ssl' => array( 
'verify_peer' => false, 
'verify_peer_name' => false, 
'allow_self_signed' => true 
) 
);

Penting! Hindari menerapkan perubahan ini secara global di php.ini karena akan menyebabkan koneksi yang tidak aman, yang sebenarnya telah diatasi oleh PHP sejak versi 5.6.

Karena SMTP Hostinger tidak bermasalah dalam hal ini, Anda bisa mencoba beralih ke layanan email bisnis kami untuk mengoptimalkan penggunaan email Anda.

Kesimpulan

Anda bisa mengirim email dengan PHP menggunakan fungsi mail() atau library pengiriman email seperti PHPMailer. Fungsi mail() cocok untuk mengirim pesan berbasis teks sederhana dalam jumlah kecil, sedangkan PHPMailer lebih ideal untuk mengirim email secara massal atau membuat formulir kontak.

Anda bisa memanfaatkan fungsi PHP mail bawaan dengan membuat file PHP baru di direktori public_html dan menjalankan skrip menggunakan web browser.

Di sisi lain, mengirim email dengan PHPMailer membutuhkan penginstalan library kode melalui Composer, membuat akun email untuknya, dan mengonfigurasi pengaturan SMTP hosting Anda.

Dalam tutorial ini, kami sudah membahas cara menginstal PHPMailer, membuat skrip pengujian, dan menyiapkan formulir kontak sederhana. Anda juga sudah mempelajari cara mengirim email dengan PHP mail() dan menyelesaikan error umum selama proses pengiriman email.

Mudah-mudahan, tutorial ini bermanfaat bagi Anda, ya. Apabila masih memiliki pertanyaan, silakan sampaikan lewat kolom komentar di bawah ini.

Tanya jawab (FAQ) cara mengirim email dengan PHP mail

Bisakah mengirim email dari PHPMailer ke Gmail atau layanan email lainnya?

Tergantung pada provider hosting Anda. Dengan GoDaddy, Anda tidak bisa mengirim email ke kotak masuk yang menerapkan protokol autentikasi email SPF dan DKIM seperti Gmail, Yahoo, dan Hotmail. Namun, masalah ini tidak terjadi di Hostinger. Hubungi web host Anda untuk mengklarifikasi pengaturan SMTP-nya dan apakah mereka mendukung PHPMailer dengan server SMTP eksternal.

Bagaimana cara memastikan alamat email sebelum menggunakan PHP mail() atau PHPMailer untuk mengirim email?

Anda bisa menggunakan fungsi filter_var () dan meneruskan alamat email ke filter FILTER_VALIDATE_EMAIL. Filter ini akan memverifikasi bahwa email valid, memastikan email tersebut tidak mengandung karakter yang tidak didukung atau spasi kosong.

Author
Penulis

Faradilla Ayunindya

Faradilla, yang lebih akrab disapa Ninda, adalah Content Marketing Specialist di Hostinger. Ia suka mengikuti tren teknologi, digital marketing, dan belajar bahasa. Melalui tutorial Hostinger ini, Ninda ingin berbagi informasi dan membantu pembaca menyelesaikan masalah yang dialami. Kenali Ninda lebih dekat di LinkedIn.