De ingebouwde mail()-functie van PHP geeft berichten door aan het lokale sendmail-binair zonder SMTP-authenticatie, zonder TLS-onderhandeling en zonder gestructureerde foutrapportage. PHPMailer voegt aan PHP-applicaties een SMTP-client, MIME-opmaak en ondersteuning voor bijlagen toe.
Hoe installeer je PHPMailer?
Gebruik Composer:
composer require phpmailer/phpmailer
Laad daarna de autoloader en importeer de klassen die je nodig hebt:
<?php
require "vendor/autoload.php";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
Hoe configureer je SMTP en verstuur je een bericht?
Maak een PHPMailer-instantie aan, schakel over naar SMTP-modus met isSMTP() en stel de verbindings- en berichtvelden in. Wikkel de aanroep in try/catch zodat een mislukte verzending wordt gemeld in plaats van stilzwijgend genegeerd:
<?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}";
}
Stem SMTPSecure af op de poort van je server: ENCRYPTION_STARTTLS op poort 587 upgradet een onversleutelde verbinding naar TLS, en ENCRYPTION_SMTPS op poort 465 zet direct TLS op. Als je isHTML(true) instelt, wordt Body als HTML behandeld en wordt AltBody meegestuurd als platte-tekstdeel voor clients die geen HTML weergeven. Beide delen meesturen verbetert ook de afleverbaarheid. Als je true aan de constructor meegeeft, gooien fouten een Exception in plaats van false terug te geven.
Hoe voeg je een bijlage toe?
Roep addAttachment aan met een bestandspad vóór send():
<?php
$mail->addAttachment("./invoices/invoice-1042.pdf", "invoice.pdf");
Het tweede argument hernoemt het bestand zoals de ontvanger het ziet. Je kunt het meerdere keren aanroepen voor meerdere bijlagen.
Verstuur het met Bird
Om e-mail vanuit PHP via HTTPS te versturen zonder zelf een SMTP-verbinding te beheren, installeer je de Bird PHP-SDK (composer require messagebird/sdk) en roep je $bird->email->send() aan:
<?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";
Met de afzender onboarding@messagebird.dev en de sandboxontvanger delivered@messagebird.dev controleer je je API-sleutel en payload voordat je een eigen domein configureert.