Fungsi bawaan PHP mail() menyerahkan pesan ke binary sendmail lokal tanpa autentikasi SMTP, negosiasi TLS, atau pelaporan kesalahan yang terstruktur. PHPMailer menambahkan klien SMTP, pemformatan MIME, dan dukungan lampiran ke aplikasi PHP.
Bagaimana cara menginstal PHPMailer?
Gunakan Composer:
composer require phpmailer/phpmailer
Kemudian muat autoloader dan impor kelas yang Anda butuhkan:
<?php
require "vendor/autoload.php";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
Bagaimana cara mengonfigurasi SMTP dan mengirim pesan?
Buat instance PHPMailer, alihkan ke mode SMTP dengan isSMTP(), lalu atur field koneksi dan pesan. Bungkus panggilan dalam try/catch agar pengiriman yang gagal dilaporkan, bukan diabaikan:
<?php
$mail = new PHPMailer(true); // true enables exceptions
try {
// Server settings
$mail->isSMTP();
$mail->Host = "smtp.example.com";
$mail->SMTPAuth = true;
$mail->Username = getenv("SMTP_USER");
$mail->Password = getenv("SMTP_PASS");
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
// Recipients
$mail->setFrom("you@yourdomain.com", "Your App");
$mail->addAddress("recipient@example.org", "Recipient Name");
// Content
$mail->isHTML(true);
$mail->Subject = "Your receipt";
$mail->Body = "<p>Thanks for your order.</p>";
$mail->AltBody = "Thanks for your order. This is the plain-text version.";
$mail->send();
echo "Message sent.";
} catch (Exception $e) {
echo "Send failed: {$mail->ErrorInfo}";
}
Sesuaikan SMTPSecure dengan port server Anda: ENCRYPTION_STARTTLS pada port 587 meng-upgrade koneksi teks biasa ke TLS, sedangkan ENCRYPTION_SMTPS pada port 465 langsung menegosiasikan TLS. Mengatur isHTML(true) menandai Body sebagai HTML dan menyertakan AltBody sebagai bagian teks biasa untuk klien yang tidak merender HTML. Menyertakan kedua bagian juga meningkatkan deliverability. Jika Anda memberikan true ke constructor, kegagalan akan melempar Exception alih-alih mengembalikan false.
Bagaimana cara menambahkan lampiran?
Panggil addAttachment dengan path file sebelum send():
<?php
$mail->addAttachment("./invoices/invoice-1042.pdf", "invoice.pdf");
Argumen kedua mengganti nama file sebagaimana dilihat oleh penerima. Anda bisa memanggilnya lebih dari sekali untuk beberapa lampiran.
Kirim dengan Bird
Untuk mengirim email dari PHP melalui HTTPS tanpa mengelola koneksi SMTP, instal Bird PHP SDK (composer require messagebird/sdk) lalu panggil $bird->email->send():
<?php
use MessageBird\Bird;
$bird = new Bird(apiKey: getenv("BIRD_API_KEY"));
$message = $bird->email->send(
from: "onboarding@messagebird.dev",
to: ["delivered@messagebird.dev"],
subject: "Hello from PHP",
html: "<p>It works.</p>",
);
echo $message->getId(), " ", $message->getStatus(), "\n";
Pengirim onboarding@messagebird.dev dan penerima sandbox delivered@messagebird.dev memverifikasi kunci API dan payload Anda sebelum Anda mengonfigurasi domain kustom.