Jak mohu v PHP pomocí mail() nastavit správného odesílatele? SMTP
Pokud Vaše webové stránky odesílají e-maily pomocí PHP funkce mail(), odchází zpráva bez přihlášení. Technickým odesílatelem (Return-Path) je pak často systémový účet Vašeho hostingového balíčku, a ne Vaše vlastní adresa. Kvůli tomu SPF a DMARC nesedí správně, e-maily častěji končí ve spamu a chybová hlášení chodí do schránky, kterou nikdo nesleduje.
Nechte proto své webové stránky odesílat e-maily přes SMTP s přihlášením, stejně jako to dělá Váš e-mailový klient. Odesílatelem je pak Vaše vlastní adresa a e-mail je považován za běžnou poštu z Vaší domény.
Údaje pro SMTP
- Server: název Vaší domény (jouwdomein.nl), pokud jsou Vaše webové stránky hostovány u WebOké, nebo název serveru Vašeho balíčku, například linux2023.webawere.nl. Najdete jej v Můj WebOké v sekci Moje produkty, ve sloupci Server.
- Port: 465 s SSL/TLS, nebo 587 se STARTTLS.
- Uživatelské jméno: celá e-mailová adresa schránky, nejlépe samostatné schránky určené pro web, například website@jouwdomein.nl.
- Heslo: heslo této schránky.
Jako odesílatele (From) použijte adresu této schránky, nebo přesměrování (forwarder), které na ni přeposílá. Adresu návštěvníka nikdy nezadávejte do From, ale do Reply-To. Jinak server e-mail odmítne nebo skončí ve spamu.
Příklad s PHPMailer
Často používanou knihovnou je PHPMailer. Nainstalujete ji pomocí Composeru (composer require phpmailer/phpmailer).
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// SMTP-instellingen
$mail->isSMTP();
$mail->Host = 'jouwdomein.nl';
$mail->Port = 465;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->SMTPAuth = true;
$mail->Username = 'website@jouwdomein.nl';
$mail->Password = 'wachtwoord';
$mail->CharSet = 'UTF-8';
// Afzender, antwoordadres en ontvanger
$mail->setFrom('website@jouwdomein.nl', 'Website jouwdomein.nl');
$mail->addReplyTo('bezoeker@example.net');
$mail->addAddress('info@jouwdomein.nl');
// Bericht
$mail->Subject = 'Testbericht';
$mail->Body = 'Dit is een testmail verzonden via SMTP.';
$mail->send();
echo 'E-mail verzonden';
} catch (Exception $e) {
echo 'Versturen mislukt: ' . $mail->ErrorInfo;
}
Používáte WordPress nebo WooCommerce? Pak to vyřešíte pomocí SMTP pluginu, viz Spolehlivé odesílání e-mailů z WordPressu a WooCommerce přes SMTP. Jak ochránit formulář před spamem, se dočtete v článku Kontaktní formulář na Vašem webu: odesílání polí e-mailem a prevence spamu.
Chcete se dozvědět více? Absolvujte bezplatný kurz E-mail v pořádku, lekci 7.3 E-maily z Vašeho webu a formulářů.
Chcete se dozvědět více? Absolvujte bezplatný kurz WordPressu, lekci 9.1 E-maily z WordPressu.
