Kontaktní formulář a e-maily přes SMTP
Jak z PHP webu spolehlivě odesílat e-maily přes SMTP knihovnou PHPMailer.
2 min čtení·Aktualizováno 28. října 2026
Funkce mail() potřebuje na serveru poštovní program a e-maily z ní často končí ve spamu nebo nedorazí. Spolehlivější je posílat poštu přes SMTP schránky, kterou už máš (u poskytovatele e-mailu ke své doméně, Gmail apod.), knihovnou PHPMailer.
1. Údaje k SMTP
U poskytovatele e-mailu zjisti server, port a šifrování – obvykle port 587 se STARTTLS nebo 465 se SSL. U Gmailu je server smtp.gmail.com a místo hesla k účtu použiješ heslo aplikace (vyžaduje zapnuté dvoufázové ověření).
2. PHPMailer
Z github.com/PHPMailer/PHPMailer stáhni poslední release, rozbal ho a složku src nahraj do www/phpmailer/.
3. Formulář
<form method="post" action="/odeslat.php">
<input name="email" type="email" required>
<textarea name="zprava" required maxlength="5000"></textarea>
<input name="web" hidden>
<button>Odeslat</button>
</form>
Skryté pole web člověk nevyplní, spamboti ano – podle toho je odfiltruješ.
4. Odeslání – www/odeslat.php
<?php
use PHPMailer\PHPMailer\PHPMailer;
require __DIR__ . '/phpmailer/src/Exception.php';
require __DIR__ . '/phpmailer/src/PHPMailer.php';
require __DIR__ . '/phpmailer/src/SMTP.php';
$email = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL);
$zprava = trim($_POST['zprava'] ?? '');
if (!$email || $zprava === '' || !empty($_POST['web'])) {
exit('Vyplň prosím e-mail a zprávu.');
}
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = 'smtp.example.cz';
$mail->SMTPAuth = true;
$mail->Username = 'web@example.cz';
$mail->Password = 'heslo';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
$mail->CharSet = 'UTF-8';
$mail->setFrom('web@example.cz', 'Web');
$mail->addAddress('ja@example.cz');
$mail->addReplyTo($email);
$mail->Subject = 'Zpráva z webu';
$mail->Body = $zprava;
$mail->send();
echo 'Díky, zpráva odešla.';
} catch (Exception $e) {
error_log('Mail: ' . $mail->ErrorInfo);
echo 'Zprávu se nepodařilo odeslat.';
}
Na co si dát pozor
- Odesílatel (
setFrom) musí být adresa schránky, přes kterou posíláš. Adresa návštěvníka patří doaddReplyTo– na zprávu pak rovnou odpovíš. - Pro port 465 nastav
PHPMailer::ENCRYPTION_SMTPS. - Chyby odeslání najdeš v logu (Chyby PHP a error log).
Pro web si založ zvláštní schránku, ne svou hlavní. Heslo nech jen v souboru.php– jeho obsah se návštěvníkovi nezobrazí, na rozdíl od.txtnebo.json.
Webhosting od 30 Kč měsíčně
Statický web, WordPress nebo web s databází.