rozesílaní emailů z formuláře (diakritika) - fórum

Kategorie: Programování / PHP

přidatNový příspěvek

Chcete-li odebírat toto téma e-mailem, přihlašte se nebo se nejprve zaregistrujte.

rozesílaní emailů z formuláře (diakritika)

Michal, 20.11.2012 23:16:52

Dobrý den

Poprosil bych o vaši radu! už asi třetí den doumám nad tím proč se mi nezobrazuje odesílatel. Hledal jsem i na googlu a našel jsem pár kódů ty sice vyřešili problém z odesílatelem, ale přivodili další obtíž a to je špatné zobrazovaní háčků a čárek. v textu.

Přikládám sem kód, který mi místo určeného odesílatele zobrazí emailovku w31078@wedos.net. (diakritika se zobrazuje v textu správně. V předmětu se zobrazuje správně až na seznam.)

<?php


$nazev="název";
$mail1="alias@domena.cz";
$mail="alias@domena.cz";

ini_set('sendmail_from', $mail1);
$Name = "$nazev";
$email = $mail1;
$recipient = "$mail";
$mail_body = "Pěkný den přeji";
$subject = "Zdravíčko";
$header = "Content-type: text/html; charset=utf-8; From: ". $Name . " <" . $email . ">\r\n";

mail($recipient, $subject, $mail_body, $header);

?>


Přikládám i druhý kód, který jsem objevil na googlu. Tady je naopak v pořádku odesílatel i předmět emailu. ale v textu se místo vět objeví tento řádek:

=?utf-8?B?xZnDrWvDoSBzZSBjb8W+ZcWhLCBNaWNoYWwgxaB1csO9LCA3NzYxNTk5MjA=?=

tady je kód:

<?

// 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="")
{
$textmailu= "=?utf-8?B?".base64_encode(autoUTF($predmety))."?=";
$predmety = "=?utf-8?B?".base64_encode(autoUTF($predmety))."?=";
$head .= "Content-Type: text/html; 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šechny dokumenty jsou v kódování UTF-8 a webhosting mám u wedosu. Poprosil bych vás o nějakou radu a opravu kódu protože jsem s toho vedle. Navíc jiné webhostingy normálně s prvním kódem spolupracují a jedou v pohodě a nerad bych přecházel ke konkureci v rámci hostingu děkuji všem za pozitivní odpovědi.

Re: rozesílaní emailů z formuláře (diakritika)

Petr Šťastný, WEDOS, 21.11.2012 09:34:19

Doporučil bych nic podobného vlastními silami nevyvíjet a použít hotová řešení:

http://sourceforge.net/projects/phpmailer/

Re: rozesílaní emailů z formuláře (diakritika)

Michal, 21.11.2012 11:35:35

Děkuji za odpověď, ale mým cílem je mít kód k odesílání emailu na jeden dokument napojený na formulář.A ne mít ve svém projektu 5-10 dokumetu jen na odeslání jednoho emailu. Navíc mě nenapadá jak napojit toto hotové řešení na můj formulář. mě na tom všem zaráží že můj kód uplně v pohodě funguje na jiném hostingu takže (můj názor a nemusí být pravdivý) musí být webhosting jinak nastavený a v tom případě pozměnit musím i kód, ale to vůbec nemůžu předvídat co je na webhostingu wedos jinak a jak mám kód pozměnit.

Re: rozesílaní emailů z formuláře (diakritika)

Petr Šťastný, WEDOS, 21.11.2012 11:40:27

Já myslím, že vám určitě chybí hlavička s informací o tom, že tělo zprávy je v Base64 kódování. Pak bych zkusil použít odřádkování hlaviček jen \n namísto \r\n.

Re: rozesílaní emailů z formuláře (diakritika)

Michal, 21.11.2012 12:36:42

takže jsem nad vašimi rady zapřemýšlel a pozkoušel to ve více kódech nakonec se mi ujala změna v řádkování u tohoto kódu:

<?php

$name = "facetrade.cz";
$from_address = "info@facetrade.cz";


$to_address = $_POST['to_address'];
$message = $_POST['message'];
$subject = $_POST['subject'];


$headers .= 'MIME-Version: 1.0' . "\n";
$headers = 'Content-type: text/html; charset=utf-8' . "\n";
$headers .= 'Content-Transfer-Encoding:8bit' . "\n";
$headers .= 'From: '. $name . ' <' . $from_address . '>'. "\n";

?>

mail($to_address, $subject, $message, $headers);

Funguje mi téměř znamenitě, až na seznam.cz, kde se v předmětu zobrazují místo diakritiky otazníky podotýkám, že jen na seznamu, to se dá zkousnout {hold tomu budu muset přizpůsobit předmět). Pokud by jste měl s tímto problémem nějaké zkušenosti byl bych rád za radu.

Už teď vám děkuju za drahocenné rady :-).

Re: rozesílaní emailů z formuláře (diakritika)

enonym, 07.04.2013 23:05:23

Díky, tohle pomohlo i mně.
\n je potřeba.

Re: rozesílaní emailů z formuláře (diakritika)

Petr Soukup, 22.08.2014 13:08:48

Měl jsem stejný problém. Na localhostu mi to odesílání fungovalo, ale na Wedosu problémy s diakritikou. Měl jsem na koncích řádků v headers \r\n, po nahrazení za pouze \n vše funguje bez problémů.

Přihlášení zákazníka

Nemáte ještě zákaznický účet? Registrace

Copyright © WEDOS, 2018

Facebook RSS