Autor Zpráva
Honza84
Profil *
Protože jsem byl vyzván nemíchat se do cizích témat, které mají stejnou podstatu, na radu moderátora zakládám nové téma.

Mám stále problém s kódováním, i když jsem se řídil radami z vlákna "Kódování e-mailu, aneb abychom neposílali otazníky." http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=2111#3

Můžete mi někdo poradit, nebo spíš sepsat lépe než je to ve zmíněném příspěvku, jak vlastně kód poskládat?
Formulář sám o sobně mi funguje dobře.
Díky moc. Honza

Doplňuji svůj dotaz o můj zdrojový kód:
HTML stránka s formulářem:

<form action="mail_jednotky.php" method="post">

<p>
  Příjmení a jméno:
</p>
<input type="text" name="jmeno"> <br>

<p>
  Váš e-mail:
</p>
<input type="text" name="email"><br>

<p>
  Váš telefon:
</p>
<input type="text" name="telefon"><br>

<input type="hidden" readonly="readonly" value="Připomínky k programu" name="predmet">

<p>
  Připomínka nebo jiná informace:
</p>
<textarea name="textmailu" rows="5" cols="50" tabindex="1"></textarea>


<input type="hidden" value="pan.hodny@centrum.cz" name="pro">
<input type="hidden" value="jina.adresa@centrum.cz" name="kopie">
<INPUT TYPE="SUBMIT" VALUE="Zaslat dotaz">

</form>





a PHP soubor, který data odesílá


<?

// convert to UTF-8
function autoUTF($s)
{
    // detect UTF-8
    if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
        return $s;

    // detect WINDOWS-1250
    if (preg_match('#[\x7F-\x9F\xBC]#', $s))
        return iconv('WINDOWS-1250', 'UTF-8', $s);

    // assume ISO-8859-2
    return iconv('ISO-8859-2', 'UTF-8', $s);
} 


function cs_mail($komu, $predmety, $textmailu, $odesilatel, $head="")
{
    $predmety = "=?utf-8?B?".base64_encode(autoUTF($predmety))."?=";
    $head .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";

    return mail($komu, $predmety, $textmailu, $odesilatel, $head);
}


$pro = $_POST['pro'];
$kopie = $_POST['kopie'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$jmeno = $_POST['jmeno'];
$predmet = $_POST['predmet'];
$textmailu = $_POST['textmailu'];

$komu = $pro.", ".$kopie;
$predmety = $predmet.", ".$jmeno. ", ".$telefon;


cs_mail($komu, $predmety, $textmailu, "From: $_POST[email]\r\n");

?>


V tomto řešení také netuším, proč je tam použito to \r\n ????
Co je MIME hlavička, o které jsem někde slyšel, a kam ji napsat?

Dříve jsem ke stejnému formuláři používal pouze toto:

<?

$pro = $_POST['pro'];
$kopie = $_POST['kopie'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$jmeno = $_POST['jmeno'];
$predmet = $_POST['predmet'];
$textmailu = $_POST['textmailu'];


mail("$pro, $kopie", "$predmet, $jmeno, $telefon", "$textmailu, $jmeno, $telefon", "From: " . $_POST["email"]);

?>



a fungovalo to velmi dobře, pak se postupně začalo v příchozích e-mailech pokakávat kódování češtiny.
Toto jsem kdysi někde okoukal a upravil podle sebe.
Už ale ani nevím, proč je tam např. toto


$textmailu = $_POST['textmailu'];


, ale vím, že bez této deklarace formulář nefungoval a má to něco společného s nastavením serveru. Uměl by mi i toto někdo polopaticky vysvětlit? Díky moc.
peta
Profil
\r\n = je zalomeni noveho radku (return + newline). Pouziva to i javascript (Obvykle staci \n)
Je to oddelovac parametru pro mail hlavicky.
<span title="aaa" id="bbb">
<span title="aaa"
id="bbb">
<span title=aaa id=bbb>

v html pouzivas mezeru ci novy radek (\n nebo \r\n), pro mail \r\n

MIME hlavička = mime type, header -> google, jedna se o hlavicku, asi mailu a typ datoveho obsahu (text/plain, text/html, image/jpeg). Pravdepodobne v teto kombinaci je to hlavicka obsahujici typ datoveho obsahu text/plain
radek
$head .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";

autoUTF je jakasi uzivatelska funkce, ktera se pokousi urcit jedno ze 3 beznych kodovani v cr: utf, win-1250, win-latin2. Urci kodovani a prevede pak text na utf. Povazuji to za velice sikovne.

$predmety = "=?utf-8?B?".base64_encode(autoUTF($predmety))."?=";
je prevod textu v predmetu na kodovani utf a soucasne prekodovano na base64, coz by melo bezpecne zachranit znaky proti jen prekodovani na utf. Pred celym tim a-zA-Z0-9(a nejake dalsi 3 znaky) kodem je treba uvest, co je to zac, aby to umel mailovy program rozkodovat zpet do textu.
Jiste se ti stalo, ze uz ti parkrat prisel mail, kde misto diakritiky byli v "predmetu" jakesi ctverecky s otaznikem.

a zbytek je na
http://php.net/mail
"Example #4 Sending HTML email" //zajimave mozna MIME
"krzysiek dot 333 at gmail dot com 03-Aug-2011 06:24"
Mozna by bylo dobre podle toho prikladu uvest do $header take verzi MIME.
Alphard
Profil
Honza84:
peta se to pokusil trochu víc rozepsat, ale vy možná hledáte spíš hotové řešení. Ve FAQ to mám na začátku vysvětlené, ale pak tam jsou 2 hotové funkce.

Ty funkce si bezezměny zkopírujte a pak zavolejte
cs_mail("$pro, $kopie", "$predmet, $jmeno, $telefon", "$textmailu, $jmeno, $telefon", "From: $_POST[email]\r\n");
Honza84
Profil *
Pánové, já Vám velice děkuji.
Problém byl nakonec v tom, že jsem používal dvojí odřádkování
\r\n
, což jaksi nebylo ve shodě s nastavením hostingu na Forpsi. Jiný hosting s tím problém neměl. Na Forpsi došlo vždy k dvojímu odřádkování a tím se pak stalo, že čeština fungovala jen pro předmět zprávy, nikoli již pro vlastní tělo zprávy. Takže vyřešeno.

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:

0