Wbudowana w PHP funkcja mail() przekazuje wiadomości do lokalnego pliku binarnego sendmail bez uwierzytelniania SMTP, bez negocjacji TLS i bez ustrukturyzowanego raportowania błędów. PHPMailer dodaje do aplikacji PHP klienta SMTP, formatowanie MIME i obsługę załączników.
Jak zainstalować PHPMailer?
Użyj Composera:
composer require phpmailer/phpmailer
Następnie załaduj autoloader i zaimportuj potrzebne klasy:
<?php
require "vendor/autoload.php";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
Jak skonfigurować SMTP i wysłać wiadomość?
Utwórz instancję PHPMailer, przełącz ją w tryb SMTP za pomocą isSMTP(), a potem ustaw pola połączenia i wiadomości. Opakuj wywołanie w try/catch, żeby nieudana wysyłka została zgłoszona, a nie pominięta:
<?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}";
}
Dopasuj SMTPSecure do portu serwera: ENCRYPTION_STARTTLS na porcie 587 podnosi nieszyfrowane połączenie do TLS, a ENCRYPTION_SMTPS na porcie 465 negocjuje TLS od razu. Ustawienie isHTML(true) oznacza Body jako HTML i dołącza AltBody jako część tekstową dla klientów, które nie renderują HTML. Dołączenie obu części poprawia też dostarczalność. Przekazanie true do konstruktora sprawia, że błędy rzucają Exception zamiast zwracać false.
Jak dodać załącznik?
Wywołaj addAttachment ze ścieżką do pliku przed send():
<?php
$mail->addAttachment("./invoices/invoice-1042.pdf", "invoice.pdf");
Drugi argument zmienia nazwę pliku widoczną dla odbiorcy. Możesz wywołać tę metodę wielokrotnie, aby dodać wiele załączników.
Wyślij za pomocą Bird
Aby wysyłać e-maile z PHP przez HTTPS bez zarządzania połączeniem SMTP, zainstaluj Bird PHP SDK (composer require messagebird/sdk) i wywołaj $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";
Nadawca onboarding@messagebird.dev i odbiorca sandboxowy delivered@messagebird.dev pozwalają sprawdzić klucz API i ładunek, zanim skonfigurujesz własną domenę.