Autor Zpráva
IrisCZ
Profil
Ahoj. Potřeboval jsem vytvořit jednoduchý kontaktní formulář na plánované stránky. Problémem je, že skript, který jsem pro něj napsal, nefunguje a nemůžu v něm najít žádnou chybu. Mail() jako takový funguje, to mám odzkoušené. Netuší někdo, kde je chyba? (rád bych se vyhnul použití nějakého cizího skriptu typu simplemail).

<?php
if(isset($_POST['odeslat'])){ 
  if($_POST['jmeno']!="" AND $_POST['email']!="" AND $_POST['sluzby']!="" AND $_POST['zprava']!=""){
    $email='xxx@gmail.com'; 
    $jmeno=$_POST['jmeno'];
    $predmet="Email od - " . $jmeno;
    $adresat=$_POST['email'];
    $telefon=$_POST['telefon'];
    $sluzby=$_POST['sluzby'];
    $hlavicky="Od: " . $jmeno . "\n" .
              "E-mail: " . $adresat . "\n" .
              "Telefon: " . $telefon . "\n" .
              "Požadované služby: " . $sluzby . "\n";
    $zprava=$_POST['zprava'];
    mail($email,$predmet,$zprava,$hlavicky);
  } else { echo "Nevyplnil/a jste všechny povinné položky (označené hvězdičkou)!"; }
}
?>
Fisir
Profil
Reaguji na IrisCZa:
Mně se nezdají hlavičky, vypadají dost nestandardně. Zkus to poslat bez nich.
IrisCZ
Profil
http://cz1.php.net/function.mail
Zde jsou normálně popsané. Zkusil jsem je vymazat, ale nepomohlo to.
Jan Tvrdík
Profil
IrisCZ:
Na základě čeho se domníváš, že ten skript nefunguje? Vypisuje nějakou chybu?
IrisCZ
Profil
Neposílá emaily, chyby se žádné neobjevují.
Fisir
Profil
Reaguji na IrisCZa:
Podívej se na mail() neodesílá na gmail
Joker
Profil
IrisCZ:
Zde jsou normálně popsané.
Kde se na té stránce píše, že by pro e-maily byly definované hlavičky „od“, „E-mail“, „Telefon“ a „Požadované služby“?
Třeba „Požadované služby“ není ani platný název hlavičky, protože název hlavičky může obsahovat jen znaky ASCII 33-126. A i hodnota hlavičky může obsahovat jen US-ASCII znaky.

Dále ještě viz právě ta odkázaná manuálová stránka, každý e-mail musí obsahovat hlavičku „from“.
Může být pravda nastavená výchozí hodnota v php.ini (což se taky píše na té manuálové stránce), ale pokud není a ta hlavička není ani u e-mailu, zprávy se neodešlou.
DarkMeni
Profil
IrisCZ:
Zde jsou normálně popsané.
Kde? Hlavičky jako "Od:", "E-Mail:", "Požadované služby:" sem tam nenašel (navíc to neodpovídá formátu RFC 2822)

Zkus zjistit kam se skript dostane:
<?php
if(isset($_POST['odeslat'])){ 
  if($_POST['jmeno']!="" AND $_POST['email']!="" AND $_POST['sluzby']!="" AND $_POST['zprava']!=""){
    $email='xxx@gmail.com'; 
    $jmeno=$_POST['jmeno'];
    $predmet="Email od - " . $jmeno;
    $adresat=$_POST['email'];
    $telefon=$_POST['telefon'];
    $sluzby=$_POST['sluzby'];
    $hlavicky="Od: " . $jmeno . "\n" .
              "E-mail: " . $adresat . "\n" .
              "Telefon: " . $telefon . "\n" .
              "Požadované služby: " . $sluzby . "\n";
    $zprava=$_POST['zprava'];
    echo "Debug: výpis proměnných předávaných funkci mail";
    var_dump($mail, $predmet, $zprava, $hlavicky);
    mail($email,$predmet,$zprava,$hlavicky);
  } else { echo "Debug: zadané hodnoty neprošly podmínkou"; }
} else { echo "Debug: formulář nebyl odeslán"; }
?>

Můžeš taky zkusit místo "\n" použít "\r\n" a zakódovat předmět do base64
IrisCZ
Profil
Omlouvám se, ty hlavičky jsem špatně pochopil. S PHP teorv začínám, takže tomu, co dělám, rozumím jenom napůl. Přepsal jsem to tedy takhle, ale stále to nefunguje. Zkusil jsem to pro jistotu posílat i na seznam.cz

<?php
if(isset($_POST['odeslat'])){ 
  if($_POST['jmeno']!="" AND $_POST['email']!="" AND $_POST['sluzby']!="" AND $_POST['zprava']!=""){
    $email='xxx@seznam.cz'; 
    $jmeno=$_POST['jmeno'];
    $predmet="Email od - " . $jmeno;
    $adresat=$_POST['email'];
    $telefon=$_POST['telefon'];
    $sluzby=$_POST['sluzby'];
    $headers = "From: $email\nMIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: 8bit\n";
    $kontakty="Od: " . $jmeno . "\r\n" .
              "E-mail: " . $adresat . "\r\n" .
              "Telefon: " . $telefon . "\r\n" .
              "Požadované služby: " . $sluzby . "\r\n";
    $zprava=$_POST['zprava'];
    $message=$kontakty . $zprava;
    mail($email,$predmet,$message,$headers);
  } else { echo "Nevyplnil/a jste všechny povinné položky (označené hvězdičkou)!"; }
}
?>
Fisir
Profil
Reaguji na IrisCZa:
Zkus v hlavičkách místo \n použít \r\n.
IrisCZ
Profil
Také nefunguje.
breeta
Profil
A kde ti to nefunguje, na localhostu nebo na ostrém serveru? Otestuj si script první na localhostu s test mail ...
IrisCZ
Profil
Ani na localhostu a ani na serveru to nefunguje.
breeta
Profil
Na localhostu ti to něco musí zahlásit, zkus odeslat mail bez podmínek a od toho postupuj dál ...
Fisir
Profil
Reaguji na IrisCZa:
Hm… řešíme tu nic. Problém v samotné funkci mail() není. V současném provedení odesílá i na Gmail. Jsi si jist, že se vykoná první podmínka?
breeta
Profil
Fisir:
Hm… řešíme tu nic. Problém v samotné funkci mail()
Proto jsem mu to napsal ať postupuje od základu a na chybu narazí ... určitě je to v té podmínce
Davex
Profil
IrisCZ:
Jsi si jistý, že se formulář odesílá metodou POST a nepoužíváš třeba nějaký freehosting, kde je odesílání e-mailů vypnuté, zakázané nebo nefunguje? Minimálně o dvou českých bych věděl.

Zkus si poslat z webhostingu testovací e-mail:

<?php

if (mail("xxx@seznam.cz", "Testovací e-mail na Seznam", "V sobotu večer i v neděli ráno. Projde či neprojde?")) {
  echo "úspěšně odesláno";
} else {
  echo "došlo k neznámé chybě";
}

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: