Autor Zpráva
virgo86
Profil
Zdravím a hned ze startu Vím že toto téma se tady nesčetněkrát probíralo ale ani jednu jsem dostatečně nepochopil. Proto napíšu svůj skript. Jde mi o klasiku špatná diakritika v předmětu a zprávy zasláne pomocí mail(). Vím že se tam musí zapsat kodovaní ale nevím kde přesně.
můj script
$email = mysql_result($result, 0, 'email');
      $from = "From: podpora@virgonet.cz \r\n";

      $mesg = "Vaše heslo bylo změněno na: $password \r\n"
              ."Prosím co nejdříve si ho změňte. \r\n"
              ."Pokud nastanou jakékoli problémy kontaktujte prosím administratora serveru.\r\n"
              ."Kontakt na Administratora serveru\r\n"
              ."Pokud tento mail nebyl adresován Vám omlouváme se a neberte tyto informace nazřetel děkuji.\r\n"
              ."S pozdravem redakce serveru CNCnet";
      if (mail($email, ' nové heslo', $mesg, $from))
        return true;      
      else
        return false;     
t4nn3r
Profil *
no musis posilat hlavicky s tim mailem:

            $obsahmailu = "...."; 
            $subject = '...';
            $to = $formData['Mail'];
            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=utf8' . "\r\n";
            $headers .= "To: $formData[Nick] <$formData[Mail]>" . "\r\n";
            $headers .= 'From:...' . "\r\n";
            mail($to, $subject, $obsahmailu, $headers);


dale treba:
Odkaz

Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
AM_
Profil
řešilo se to tu asi milionkrát;
stručně řečeno, použij PhpMailer - velice pohodlná třída, která obstará vše, co php funkce mail() obstarat sama neumí
nightfish
Profil
opravdu se to tu řešilo milionkrát, a proto to tu máme popsané ve vlákně Nejčastější potíže s PHP (FAQ)
virgo86
Profil
díky stejně to nějak nejde ale ještě to dofaram. je někde prosím Vás manual cz na PhpMailer nejsem tak vzdělanej že bych bez problému četl anglicky bez slovníčku:) jinak kdybych nechtěl charset=utf8 je spravně napsano charset=windows-1250? toď vše k tomuto tématu
nightfish
Profil
virgo86:
je někde prosím Vás manual cz na PhpMailer
manuál přímo ne, ale článek popisující základní použití ano

jinak kdybych nechtěl charset=utf8 je spravně napsano charset=windows-1250?
ano
virgo86
Profil
ještě něco použil jsem tedy funkci cs_mail je to šikovné funguje to. zpráva je z diakritikou ale předmět ne. ale hlavně když mi to dojde na mail není to odřadkované Co mám špatně.


$mail = $email;
$predmet = "Server CNC nové heslo \r\n";
$zprava = "Vaše heslo bylo změněno na: $password \r\n Prosím co nejdříve si ho změňte. \r\n"
              ."Pokud nastanou jakékoli problémy kontaktujte prosím administratora serveru.\r\n"
              ."Kontakt na Administratora serveru\r\n"
              ."Pokud tento mail nebyl adresován Vám omlouváme se a neberte tyto informace nazřetel děkuji.\r\n"
              ."S pozdravem redakce serveru CNCnet";
$kon = cs_mail ($mail, $predmet, $zprava, "From: podpora@virgonet.cz\n");

if ($kon)
  return true;
 else
  return false;


je to script z FAQ
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 ($to, $predmet, $zprava, $head = "")
       {  $predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?=";
          $head .= "MIME-Version: 1.0\n";
          $head .= "Content-Type: text/html; charset=\"utf-8\"\n";
          $head .= "Content-Transfer-Encoding: base64\n";
          $zprava = base64_encode (autoUTF ($zprava));
          return mail ($to, $predmet, $zprava, $head); 
          }
Alphard
Profil
Když už tu funkci upravujete podle věty
Zde je zadané kódování zprávy. Když budeme posílat html mail, zde změníme na text/html.
$head .= "Content-Type: text/plain; charset=\"utf-8\"\n";

tak musíte html skutečně posílat. \r\n nemá v html kontextu význam, dejte tam <br>.

Pokažená diakritika v předmětu je mi záhadou. To \r\n bych ale radši smazal, některé programy by s tím mohly mít problém.
t4nn3r
Profil *
No ono u tech mailu jsou problemy porad, ja na to radsi vyuzivam nejakou externi class. Jinak je snad vsem jasne, kdyz email posilate jako utf-8, musi ten dokument byt taky utf-8 ...
Alphard
Profil
t4nn3r:
Jinak je snad vsem jasne, kdyz email posilate jako utf-8, musi ten dokument byt taky utf-8
Nemusí. Tento script si kódování pohlídá.
t4nn3r
Profil *
no tim bych si zase tak moc jisty nebyl, haluzilo mi posilani mailu ve scriptu u ktereho jsem si nevsiml ze je v ansi.
EOD
Profil *
t4nn3r:
Tento problém také řeším už dlouho. Prozatím mě jako nejlepší řešení přišlo:
function sendMail($from, $to, $mail_subj, $mail_txt, $coding) {
  	$headers = '';
    if ($coding == 1){
      $mail_txt = StrTr($mail_txt, "\x8A\x8D\x8E\x9A\x9D\x9E", "\xA9\xAB\xAE\xB9\xBB\xBE");
 	  }
 	  $headers .= "From: Sportobchod.eu\n".
 				  "Return-Path: $from\n".
       			"MIME-Version: 1.0\n".
 				  "Content-Type: text/plain; charset=\"iso-8859-2\"\n".
  			     "Content-Transfer-Encoding: 8bit";
       		Mail($to, $mail_subj, $mail_txt, $headers);

To je volba, kdy mi zlobí předmět, ale zpráva je všude možně zobrazena správně s diakritikou.
AM_
Profil
EOD:
no aby ne, na předmět se nevztahuje kódování těla zprávy a ty tu předmět nijak neošetříš.
Správně je něco ve stylu
$predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?=";
, ovšem já zrovna nejsem přítel funkce autoUTF() z FAQ, programátor by měl vědět, v jakém kódování mu text přijde, a autoUTF kódování zkoumá heuristicky tedy ne 100%ně. pouze místo autoUTF bych tedy dosadil do UTF korektně převedený text a pak už to nemá důvod nefungovat.
Alphard
Profil
AM:
ovšem já zrovna nejsem přítel funkce autoUTF() z FAQ, programátor by měl vědět, v jakém kódování mu text přijde
Ano, ale ten příspěvěk ve FAQ vznikl v reakci na četné dotazy a řešil konkrétní problém, myslím, že úspěšně. Tazatelé to prostě nevědí. Kdo do problematiky vidí více, tak si kód upraví k obrazu svému, nebo použije něco úplně jiného.

Zase si nemyslím, že je ideální řešení odkazovat PHPMailer. V sekci download je několik možností, začátečník samozřejmě netuší, co stáhnout a kam to rozbalit. Když konečně najde návod, uvidí tajemný zápis
$mail = new PHPMailer(); // defaults to using php "mail()" 
$mail->AddReplyTo("name@yourdomain.com","First Last");

často první setkání s OOP a vše v angličtině, mnoho tazatelů s ní má problém.
V FAQ jsem se snažil vytvořit copy&paste script, co prostě bude fungovat, a českou nápovědou.

tedy ne 100%ně
Bohužel, vzhledem k předchozímu neznám jiné řešení. Uvádím alespoň: "Dokážete-li získat data ve správném kódování (např. máte vše v utf-8), lze tento krok vynechat."
virgo86
Profil
Alphard:
díky mě už to funguje vše správně dokonce i ten předmět s diakritikou a to jsem nic neupravoval:)

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: