Autor Zpráva
MaofKO
Profil *
Ahojte, môžte sa mi pozrieť na môj skript, čo tam mám zle, už si s tým neviem rady. Email nepríde buď vôbec (ani mne, ani potvrdzujúci mail pre odosielateľa), alebo príde len ten čo má ísť odosielateľovi. Skúšam to priamo na serveri.
Vďaka, tu je kód, najprv html kód samotného formuláru a pod ním ten php skript.

<form action="" method="POST" name="registracia">
Krstné meno a priezvisko:<br><input name="meno" size="100"><br><br>
Mesto: <br><input name="mesto" size="100"><br><br>
Ulica: <br><input name="ulica" size="100"><br><br>
PSČ: <br><input name="psc" size="100"><br><br>
E-mail: <br><input name="email" size="100"><br><br>
Telefón: <br><input name="telefon" size="100"><br><br>
Číslo občianskeho preukazu: <br><input name="OP" size="100"><br><br>
Kód od obchodného zástupcu (nepovinné): <br><input name="kod" size="100"><br><br>
<input type="submit" value="Odoslať">
</form>
<br><br>

<?php

$emailSubject = 'Registrácia - KONIECPOKUTAM.SK';
$mailto = 'maros.zavodny@gmail.com';
$meno = $_POST['meno'];
$mesto = $_POST['mesto'];
$ulica = $_POST['ulica'];
$psc = $_POST['psc'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$OP = $_POST['OP'];
$kod = $_POST['kod'];


$body = <<<EOD
<br><hr><br>
Krstné meno a priezvisko: $meno <br>
Mesto: $mesto <br>
Ulica: $ulica <br>
PSČ: $psc <br>
E-mail: $email <br>
Telefón: $telefon <br>
Číslo občianskeho preukazu: $OP <br>
Kód od obchodného zástupcu: $kod <br>

EOD;

$headers = "From: $email\r\n"; 
$headers .= "Content-type: text/html\r\n"; 
$success = mail($mailto, $emailSubject, $body, $headers); 

$message = "Ďakujeme za Vašu registráciu, budeme Vás kontaktovať.<br />koniecpokutam.sk<br />";
$subject = "Potvrdenie registrácie - koniecpokutam.sk";
$headers2 = "From: $mailto\r\n";
$headers2 .= "Content-type:  text/html\r\n";
mail($email, $subject, $message, $headers2);


?>
DarkMeni
Profil
Jestli je tohle celý kód, tak nekontroluješ jestli už byl formulář odeslaný nebo ještě ne
To jde udělat třeba přes skrytý input a kontrolu jeho hodnoty
<input type="hidden" name="sent" value="1">

<?php
  if(isset($_POST["sent"])){
     //formulář byl odeslán
  }
?>

Na jakým to máš hostingu, neni tam nějaký omezení počtu odeslaných emailů na hodinu nebo tak něco?

Zkus třeba "\r\n" v headeru nahradit za konstantu PHP_EOL, někdy to pomůže
Jo a taky tam nekontorluješ jestli je zadaný email ve správném formátu nebo jestli ti tam uživatel zadává nesmysly, zkus tam přidat nějakou kontrolu třeba pře reg. výrazy nebo filter_var($email, FILTER_VALIDATE_EMAIL)
Manny
Profil
DarkMeni:
Jestli je tohle celý kód, tak nekontroluješ jestli už byl formulář odeslaný nebo ještě ne
To jde udělat třeba přes skrytý input a kontrolu jeho hodnoty
Kontrola všech stavů samozřejmě chybí, ale to neřeší problém s odesíláním, na který se ptal MaofKO

MaofKO:
Pokud funkce mail nevyhazuje chybovou hlášku, mail by měl odejít. Možná by mohlo pomoc doplnit do hlaviček kódování (více v tomto vlákně).
Dusan
Profil *
Aky mailserver pouzivas pre funkciu mail() ?

Funkcia mail () moze byt nakonfigurovana dvoma sposobmi:

- Maily odosiela priamo PHP z mailserveru ktory je nakonfigurovany v prostredi kde PHP bezi
- Maily odosiela nejaky externy handler nastaveny cez direktivu sendmail_path v PHP.INI

Predpokladam ze to budes mat nastavene tvojim hostingom, casto sa pouziva napriklad SENDMAIL mail server.

Ide ale o to, aby si sa dostal k logom ktore zaznamenavaju aktivitu SMTP. Tam by si mal vidiet presne ci emaily zo skriptu boli prijate SMTP serverom.

Inak v tvojom skripte nevidim ziadne osetrovanie chyb, napr. pre pripad ak email nebol doruceny pre SMTP.

Osobne doporucujem pre emaily pouzit PHP mailer triedu nez nativnu funkciu mail(). PHP mailer je velmi flexibilny sposob pre pracu s emailami. Celu detailnu konfiguraciu pre odosielanie emailov mas pod kontrolou ty v skripte, je mozne pohodlne vytvarat HTML emaily a error handling je jednoduchy a prehladny.
MaofKO
Profil *
Vďaka za reakcie, mám to na Exohostingu. Skrytý formulár som pridal, no nič sa nedialo, ale ako som prenastavil posielanie z môjho súkromného mailu na ostrý mail (ktorý je v rámci účtu na exohostingu), tak to zrazu ide, aj autoodpoveď príde, akurát, že nesedí kódovanie.

Dusan: V php som úplný začiatočník, takže ten skript aj tak vyzerá. PHP mailer som už pozeral, no nemám už teraz čas sa s tým učiť pracovať. :/


A ešte to na niektorých mailoch chodí do spamu.
DarkMeni
Profil
Aby si neměl rozbitou diakritiku, tak to (cokoli, v čem bude diakritika) musíš zakódovat například do base64 a obalit MIME headerem B, ten vypadá přibližně takto =?kódování?B?text?=
A s tím zakódováním pro utf-8 pak třeba takto
$subject = "=?utf-8?B?" . base64_encode($subject) . "?=";
//Když nastavíš Content-Transfer-Encoding, tak tu zprávu pak snad ani nemusíš obalovat do toho =?utf-8?b?...?=
$message = base64_encode($message);
S tím že je taky dobrý nastavit kódovaní v Content-Type (jak psal Manny v [#3])
Content-Type: text/html;Charset=utf-8
//a taky
Content-Transfer-Encoding: base64
Kdyžtak něco víc si můžeš najít tady

Ta rozbitá diakritika by mohla být i jedním z důvodů, proč ty emaily někdy chodí do smapu
MaofKO
Profil *
ďakujem, upravil som kódovanie takto, a teraz už funguje aj kódovanie, a takisto to nepríde do spamu, akurát, že potvrdzovací email príde presne tak, ako je napísané v $message: Ďakujeme za Vašu registráciu, budeme Vás kontaktovať.<br />koniecpokutam.sk<br />. Tagy br to pochopiteľne ignoruje, keďže to zoberie ako holý text, no neviem ako to upraviť tak aby ich to neignorovalo a dalo slovo "koniecpokutam.sk" na ďalší riadok.

$headers = "From: $email\r\n";  // This takes the email and displays it as who this email is from.
$headers .= "Content-Type: text/html; charset=\"utf-8\"".PHP_EOL; // This tells the server to turn the coding into the text.
$success = mail($mailto, $emailSubject, $body, $headers); // This tells the server what to send.

$message = "Ďakujeme za Vašu registráciu, budeme Vás kontaktovať.<br />koniecpokutam.sk<br />";
$subject = "Potvrdenie registrácie - koniecpokutam.sk";
$subject = "=?utf-8?B?" . base64_encode($subject) . "?=";
$headers2 = "From: $mailto\r\n";
mail($email, $subject, $message, $headers2);
DarkMeni
Profil
Nejspíš proto, že pro potvrzovací email nenastavuješ Content-Type, nebo je možný že ten emailový klient nezná xhtml (místo <br /> tam dej <br>)
A pro jistotu ještě můžeš zkusit zakódovat do base64 i zprávu
$headers = "From: $email".PHP_EOL;
$headers .= "Content-Type: text/html;charset=\"utf-8\"";
$success = mail($mailto, $emailSubject, $body, $headers);

$message = "Ďakujeme za Vašu registráciu, budeme Vás kontaktovať.<br>koniecpokutam.sk<br>";
$message = base64_encode($message);
$subject = "Potvrdenie registrácie - koniecpokutam.sk";
$subject = "=?utf-8?B?" . base64_encode($subject) . "?=";
$headers2 = "From: $mailto".PHP_EOL;
$headers2 .= "Content-Type: text/html;charset=\"utf-8\"".PHP_EOL;
$headers2 .= "Content-Transfer-Encoding: base64";
$odeslano = mail($email, $subject, $message, $headers2)
if (!$odeslano)
{
  echo "Email se nepodařilo odeslat";
}
MaofKO
Profil *
Ďakujem veľmi pekne, teraz už to funguje tak ako má, až teda na tú hlášku "email sa nepodarilo odoslať", tú mi zobrazuje stále, hneď po načítaní stránky, pod tlačidlom odoslať. :)
Davex
Profil
MaofKO:
až teda na tú hlášku "email sa nepodarilo odoslať", tú mi zobrazuje stále
Na to ti poradil řešení už [#2] DarkMeni.
MaofKO
Profil *
Áno viem, no zobrazuje ju aj tak.
Fisir
Profil
Reaguji na MaofKa:
Tipnu si: nechybí za funkcí mail středník?
MaofKO
Profil *
Tu na fóre v kóde na konci riadku nieje, ako vidím, ale u seba som ho tam dal, pretože vtedy to nefungovalo vôbec, len vyhodilo chybovú hlášku, že je chyba v nasledujúcom riadku: if (!$odeslano)

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: