24. Odesílání zpráv na email v PHP

Pro odesílání zpráv na email (např. pro kontaktní formuláře) existuje mnoho způsobů. V PHP můžeme využít např. funkci mail nebo mb_send_mail. Rozdíl mezi funkcemi mail a mb_send_mail:

  • mail je pro jednobajtové znakové sady (např. iso nebo ascii)
  • mb_send_mail je pro vícebajtové znakové sady, jako je utf-8

Tzn. že se nejčastěji používá funkce mb_send_mail. Tato funkce vyžaduje, aby byla na webhostingu povolena. Např. na Endoře.cz u free tarifu je zakázána. Pak je potřeba použít variantu s použitím SMTP protokolu. Příklad použití funkce mb_send_mail:

<?php
   mb_internal_encoding("UTF-8");
   $hlaska = '';
    if (isset($_GET['uspech']))
        echo 'Email byl úspěšně odeslán, brzy vám odpovíme.';
    if ($_POST) // V poli _POST něco je, odeslal se formulář
    {
        if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
            isset($_POST['email']) && $_POST['email'] &&
            isset($_POST['zprava']) && $_POST['zprava'] &&
            isset($_POST['rok']) && $_POST['rok'] == date('Y'))
        {
            $hlavicka = 'From:' . $_POST['email'];
            $hlavicka .= "\nMIME-Version: 1.0\n";
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
            $adresa = 'adresa[zavináč]domena.cz';
            $predmet = 'Nová zpráva z mailformu';
            $zprava = 'Od: '.$_POST['jmeno']. '<br>Text zprávy: '.$_POST['zprava'];
            $uspech = mb_send_mail($adresa, $predmet, $zprava, $hlavicka);
            if ($uspech)
            {
                header('Location: kontakt.php?uspech=ano');
                exit;
            }
            else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
        }
        else 
            $hlaska = 'Formulář není správně vyplněný!';
    }
?>
        <h2>Můžete nás kontaktovat pomocí formuláře níže.</h2>
        <?php 
            if ($hlaska)
                echo('<p>' . htmlspecialchars($hlaska) . '</p>');
        
            $jmeno = (isset($_POST['jmeno'])) ? $_POST['jmeno'] : '';
            $email = (isset($_POST['email'])) ? $_POST['email'] : '';
            $zprava = (isset($_POST['zprava'])) ? $_POST['zprava'] : '';
        ?>                
        <form method="POST">
            <table>
                <tr>
                    <td>Vaše jméno</td>
                    <td><input name="jmeno" type="text" value="<?= htmlspecialchars($jmeno) ?>"/></td>
                </tr>
                <tr>
                    <td>Váš email</td>
                    <td><input name="email" type="email" value="<?= htmlspecialchars($email) ?>"/></td>
                </tr>
                <tr>
                    <td>Aktuální rok</td>
                    <td><input name="rok" type="number" /></td>
                </tr>
                  <tr>
                    <td>Zpráva</td>
                    <td><textarea name="zprava"><?= htmlspecialchars($zprava) ?></textarea></td>
                </tr>
            </table>
            <input type="submit" value="Odeslat" />
        </form>

Hotový formulář si můžete vyzkoušet.