Dobrý den,
mám na stránkách jednoduchý rezervační systém na ples a stránka která zapisuje do databáze zarezervovaná sedadla by měla posílat i email uživateli který rezervaci provedl. Ale děje se tak jenom v ojedinělých případech proto jsem si přidal nakonec podmínku abych věděl jestli se email odešele nebo ne.
Neví si s tím někdo rady, proč to někdy jde a někdy ne?
Nebo jestli má webzdarama nějaký limit?
Tady je část kodu:
$to = "$email";
$subject = 'PLES PS SMĚR 2015 - Rezervace';
$message = $s1.$s2.$s3.$r.$s4.$s5.$s6.$s7;
$head = "MIME-Version: 1.0".PHP_EOL;
$head .= "Content-Type: text/html; charset=utf-8".PHP_EOL;
$head .= "Content-Transfer-Encoding: base64".PHP_EOL;
$head .= 'From: rezervace@ples13.wz.cz'.PHP_EOL;
$head .= 'Reply-To:'.'barbora.zembova@centrum.cz'.PHP_EOL;
$message = base64_encode($message);
$vysledek = mail($to, $subject, $message, $head);
if ($vysledek)
{
$sql1="UPDATE `rezervace` SET `mail`='Ano' WHERE `id` = '$cislo_rez'";
mysql_query($sql1);
}
else
{
$sql1="UPDATE `rezervace` SET `mail`='Ne' WHERE `id` = '$cislo_rez'";
mysql_query($sql1);
}
Podle podmínek WZ by nemělo být žádné omezení, ale ...
Kolik takovýchto emailů pošlete za hodinu?
Osobně bych si nechal spíše vypsat obsah jednotlivých proměnných bez odeslání emailu a zápisu do databáze.
místo:
$to = "$email";
bych spíše použil:
$to = $email;
nebo přímo:
$vysledek = mail($email, $subject, $message, $head);
proměnná $to je pak zcela zbytečná.
Kdysi wz.cz limit melo na pocet odeslanych mailu za hodinu. Jak je to ted by ses dozvedel mozna v menu Podpora, mozna napsat primo adminum.
http://www.webzdarma.cz/podpora.html
Nejake limity pro mail se daji zjistit tez z phpinfo(). Treba casto byva limit na velikost mailu, pameti, casu zpracovani a pod.
Pokud se jedna o ples, coz neni zas tak tajna vec s osobnimi udaji, dal by se pouzit externi mail program (blueboard nebo odjinud).
Ten zapis do db bych si tam ale urcite nechal, i kdyby ti to fungovalo ok.
$v = $vysledek ? "Ano" : "Ne";
$sql1 = "UPDATE `rezervace` SET `mail`='$v' WHERE `id` = '$cislo_rez'";
mysql_query($sql1);
U tech, co se neodeslou, bys mohl zkontrolovat, co ti php vytvori do promennych $to, $subject, $message, $head a vypsat si to nekde bokem na obrazovku treba v nejakem admin modu.
Taky zkus prepnout error_reporting na all. Jestli se neobjevi nejaka php chyba.
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
error_reporting(E_ALL);
A jeste mne napada, pokud odesilas vic mailu naraz, tak je dobre mezi to dat sleep(), aby to neslo za sebou, jinak to muze byt povazovane za spam nebo vyvolat velkou zatez a server to nemusi pustit. A neposilat to po 100, ale treba po 20.