Autor Zpráva
cosimo
Profil
Dobrý den,
pročetl jsem tu vícero diskusí na téma formulářů, a vyzkoušel různé varianty zápisu "From:" (mám podezření na chybičku v syntaxi,) ale žádné řešení se mi neosvědčilo. Ještě uvedu, že formulář fungoval u starého hostingu v pohodě. Teď na novém hostingu po odeslání dat z formuláře se příjemci nezobrazí odesilatel. Vše ostatní funguje správně.

Mohl by někdo poradit? Mám podezření na syntaxi zápisu "From:", dávám sem výchozí kód, ještě před marnými pokusy o úpravu.

<?
function cs_mail ($to, $predmet, $zprava, $head = "")
       {  $predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?=";
          $head .= "MIME-Version: 1.0\n";
          $head .= "Content-Type: text/plain; charset=\"utf-8\"\n";
          $head .= "Content-Transfer-Encoding: base64\n";
      $head .= 'From: '. $jmeno . ' <' . $email . '>'. "\n"; 
          $zprava = base64_encode (autoUTF ($zprava));
          $stav = mail ($to, $predmet, $zprava, $head);
          return $stav ?  TRUE : FALSE;  }

$predmet = " * * * Vyplněná objednávka".$_POST['vyplnena_online_objednavka']." * * * "."\n";
$zprava.=" Vyplněná objednávka z online formuláře".$_POST['vyplnena_online_objednavka']." : "."\n";
$zprava.="JMÉNO: ".$_POST['jmeno']."\n";
$zprava.="E-MAIL: ".$_POST['email']."\n";
$zprava.="POZNÁMKA: ".$_POST['poznamka']."\n";

if (cs_mail("příjemce@něco.cz", $predmet, $zprava, "From: " . $email . "\n"))
  echo "<p>Podařilo se odeslat atd.</p>";
 else echo "<p>Nepodařilo se odeslat atd.</p>";
?>
Joker
Profil
cosimo:
Odkud se vezmou hodnoty $jmeno a $email?

Když je dáte vypsat, je v nich něco?
cosimo
Profil
Joker:
Hodnoty jsou <input type='text' ....> z html formuláře.
Obě hodnoty se přiřadí a dorazí příjemci - ovšem pouze v těle emailu jako součást $zprava . Nepromítnou se do pole odesilatele.
Joker
Profil
cosimo:
Čili když zkontrolujete nějaký konkrétní běh skriptu, tak v hlavičce zprávy opravdu je něco jako From: jméno<jmeno@example.com>?
cosimo
Profil
Aj vaj, jako php laik ani nevím, jak kontrolu běhu scriptu provést, ani tu nemám nainstalovaný Apache a testuju upravené verze opětovným nahráváním na server :(
Jestli se to v běhu scriptu skutečně objeví v $head nevím. Ale přiřazení proměnným v řádcích kódu 14 a 15 do $zprava je v pořádku.
donny
Profil
obecne to je nejaké zvláštne, ja by som to upravil takto, pretože tak ako to máš tá funkcia vôbec hodnoty $from a $email nedostáva..

<?
function cs_mail ($to, $predmet, $zprava, $from, $email)
       {  $predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?=";
          $head .= "MIME-Version: 1.0\n";
          $head .= "Content-Type: text/plain; charset=\"utf-8\"\n";
          $head .= "Content-Transfer-Encoding: base64\n";
          $head .= "From: =?UTF-8?B?".base64_encode("$jmeno")."?=<$email> \r\n";
          $zprava = base64_encode (autoUTF ($zprava));
          $stav = mail ($to, $predmet, $zprava, $head);
          return $stav ?  TRUE : FALSE;  }
 
$predmet = " * * * Vyplněná objednávka".$_POST['vyplnena_online_objednavka']." * * * "."\n";
$zprava.=" Vyplněná objednávka z online formuláře".$_POST['vyplnena_online_objednavka']." : "."\n";
$zprava.="JMÉNO: ".$_POST['jmeno']."\n";
$zprava.="E-MAIL: ".$_POST['email']."\n";
$zprava.="POZNÁMKA: ".$_POST['poznamka']."\n";
 
if (cs_mail("příjemce@něco.cz", $predmet, $zprava, $_POST['jmeno'] ,$_POST['email']))
  echo "<p>Podařilo se odeslat atd.</p>";
 else echo "<p>Nepodařilo se odeslat atd.</p>";
?>



cosimo:
Aj vaj, jako php laik ani nevím, jak kontrolu běhu scriptu provést, ani tu nemám nainstalovaný Apache a testuju upravené verze opětovným nahráváním na server :(
Jestli se to v běhu scriptu skutečně objeví v $head nevím. Ale přiřazení proměnným v řádcích kódu 14 a 15 do $zprava je v pořádku.

Test či je niečo v premennej ide spraviť jednoduchým výpisom echo pred odosielanie, prípadne dovnútra funkcie, netreba tam hľadať žiadnu zložitosť...
cosimo
Profil
donny:
Zkoušel jsem kód po úpravě – to zpráva pak nedorazí vůbec.
donny
Profil
function cs_mail ($to, $predmet, $zprava, $from, $email)
{  
  $predmet = "=?utf-8?B?".base64_encode($predmet)."?="; 
  $head = "MIME-Version: 1.0\r\n";
  $head .= "Content-Type: text/html; charset=\"utf-8\"\r\n";       
  $head .= "Content-Transfer-Encoding: base64\r\n";
  $head .= "From: =?UTF-8?B?".base64_encode("$jmeno")."?=<$email> \r\n";   
  $zprava = base64_encode($zprava);
  $stav = mail ($to, $predmet, $zprava, $head);
  return $stav ?  TRUE : FALSE;
}

Pôvodne som si nevšimol že tam máš použitú funkciu autoUTF od Davida Grudla, ktorú ale v kóde nemáš definovanú!! Vyhoď to odtiaľ tak ako som to napísal hore alebo si tú funkciu vyhľadaj vo FAQ!
cosimo
Profil
donny:
Velké díky a zároveň omluva Donnymu.
Email se zpožděním nakonec dorazil, v políčku odesilatel je i e-mail a to je skvělé. (Jméno tam figurovat nutně nemusí.)


donny:
(autoUTF jsem tam měl - jen jsem zde zestručnil výpis s vědomím, že v ní chyba není)
cosimo
Profil
Jásal jsem předčasně, nefachčilo to v Outlook expess, co klient používá, odesilatel se tam objevoval jako From: "=?UTF-8?B??=" <"">.

Vyřešil jsem to zjednodušením zápisu "From:", kde nám pro naše účely v poli úplně postačuje email odesilatele:
$head .= 'From: <'.$email.">\n";

Pak jsem to ještě pojistil novým řádkem kódu, ale vše funguje i bez něho:
$email = $_POST['email'];

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: