Autor Zpráva
xXx
Profil *
Zdravím, snažím se svépomocí udělat formulář pro odesílání e-mailů. Jenže když ho testuji na wz.cz, nic mi nepřijde a nevím kde je chyba (zda-li u wz.cz, nebo na mé straně.

index.php
<!DOCTYPE html>
<html lang="cs">
    <head>
        <meta charset="utf8">

        <title>E-mail</title>

        <style type="text/css">
            @import url(css/screen.css) screen;
        </style>
    </head>

    <body>
        <form action="odeslat.php" method="post">
            <label for="jmeno">Jméno</label>
            <input name="jmeno" id="jmeno" required><br>

            <label for="mail">E-mail</label>
            <input name="mail" id="mail" required><br>

            <label for="predmet">Předmět</label>
            <input name="predmet" id="predmet" required><br>

            <label for="zprava">Text zprávy</label>
            <textarea name="zprava" id="zprava" required></textarea><br>

            <label for="captcha">
                <?
                    session_start();
                    require('captcha.php');

                    $_SESSION['captcha'] = implode('', $pole_captcha);

                    echo 'Opiště tučné znaky: <b>'.$_SESSION['captcha'].'</b>';
                ?>
            </label>
            <input name="captcha" id="captcha" required><br>

            <div style="visibility: hidden;">
                <label for="pohlavi">Toto pole ponechte prázdné</label>
                <input name="pohlavi" id="pohlavi">
            </div>            

            <button>Odeslat</button>
        </form>
    </body>
</html>

captcha.php
<?
    function captcha()
    {
        global $pole_captcha;
        $pole_znaku = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
            'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
        $pocet_znaku = rand(3, 6);

        for($i = 0; $i < $pocet_znaku; $i++)
        {
            $pole_captcha[$i] = $pole_znaku[rand(0, count($pole_znaku) - 1)];
        }

        return $pole_captcha;
    }

    captcha();
?>

odeslat.php


odeslat.php
<?
    session_start();

    header('Content-type: text/html;charset=UTF-8');

    $jmeno = trim($_POST['jmeno']);
    $mail = trim($_POST['mail']);
    $predmet = trim($_POST['predmet']);
    $zprava = trim($_POST['zprava']);
    $captcha = $_POST['captcha'];

    function chybova_zprava($cislo_chyby)
    {
        $zpet = '<a href="javascript:self.history.back();">zpět</a>';

        switch ($cislo_chyby)
        {
            case 0:
                echo 'Nutno vyplnit všechna pole formuláře. Vraťte se '.$zpet.' a formulář opravte.';
                break;

            case 1:
                echo 'Neplatný formát e-mailu. Vraťte se '.$zpet.' a zadejte platný e-mail.';
                break;

            case 2:
                echo 'Pohlaví nevyplňovat. Jděte '.$zpet.' a smažte pohlaví, poté odešlete e-mail znova.';
                break;

            case 3:
                echo 'Špatně opsaný bezpečnostní kód. Vraťte se '.$zpet.' a opiště jej znova.';
                break;
        }
    }

    if($captcha == $_SESSION['captcha'] && empty($_POST['pohlavi']))
    {
        if(filter_var($mail, FILTER_VALIDATE_EMAIL))
        {
            if(empty($jmeno) || empty($predmet) || empty($zprava))
                chybova_zprava(0);
            else
            {
                $zprava = '
                    Jméno odesílatele: '.$jmeno.'<br>
                    E-mail: '.$mail.'<br><br>
                '.$zprava;

                $to = '****@gmail.com';
                $subject = $predmet;
                $message = $zprava;
                $headers = 
                    'From: '.$mail.'\r\n'.
                    'Bcc: ***@seznam.cz'.'\r\n'.
                    'Reply-To: '.$mail.'\r\n'.
                    'Subject: '.$predmet.'\r\n'.
                    'X-Mailer: PHP/'.phpversion().'\r\n'.
                    'Content-type: text/html; charset=utf-8'.'\r\n'.
                    'MIME-Version: 1.0'.'\r\n'
                ;
                mail($to, $subject, $message, $headers);
            }
        }
        else
            chybova_zprava(1);
    }
    elseif(!empty($_POST['pohlavi']))
        chybova_zprava(2);
    else
        chybova_zprava(3);        
?>

Vidíte někdo někde chybu? Všechny podmínky mi fungují (to jsem zkoušel pomocí echo). Ještě dotaz ke kódu, mohu to takto nechat být, nebo tam je něco nevyhovujícího?
Pepiik
Profil
Co vrátí funkce mail?
var_dump(  mail($to, $subject, $message, $headers));

zkus zakomentovat FROM z hlavičky

 $headers = 
                  //  'From: '.$mail.'\r\n'.
                  //  'Bcc: ***@seznam.cz'.'\r\n'.
                    'Reply-To: '.$mail.'\r\n'.
                    'Subject: '.$predmet.'\r\n'.
                    'X-Mailer: PHP/'.phpversion().'\r\n'.
                    'Content-type: text/html; charset=utf-8'.'\r\n'.
                    'MIME-Version: 1.0'.'\r\n'
                ;
xXx
Profil *
Děkuji za radu, nyní e-mail přišel (a var_dump vrací bool(true)). Jen koukám, že hlavička je nějaká rozbitá
Reply-To: ****@gmail.comrnSubject:PokusrnX-Mailer:PHP/5.2.13rnContent-type: text/html@nike.s.webzdarma.cz;,
    "charset=utf-8rnMIME-Version:1.0rn"@nike.s.webzdarma.cz
Pepiik
Profil
oni jako mnoho poskytovatelů blokují odesílání emailu pokud v hlavičce mají nastavenou položku FROM na jinou doménu.
Pokud je to kontaktní formulář tak si tu položku From dej někam do textu zprávy. Na wz bude ještě další omezení jako třeba 10 emailu za hodinu atd.

v hlavičce zkus použít jen \n místo \r\n
xXx
Profil *
Tak hlavičky stále zlobí :( jinak těch 10 e-mailů na hodinu mi na testování stačí
xXx
Profil *
Problém vyřešen. Zádrhel byl v uvozovkách (jednoduché nefungovali, dvojité již ano).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: