Přidáno: 07.09.2008 v 14.08
Posíláte v e-mailech různé styly, velikosti či barvy písma? Vkládáte přímo do textu obrázky? Tak právě vy používáte HTML formátování e-mailů. Osobě mám tuto možnost ve svém klientovi zakázanou, ale občas musí člověk ustoupit, jít proti svému přesvědčení a projekt vypracovat.
Při posílání textových e-mailů se vyskytuje jediný problém s kódováním češtiny. Při UTF-8 kódování textu je úkol o něco obtížnější, ale PHP nám nabízí dostatek Multibyte String funkcí. Při vytváření HTML zpráv, které se mají zobrazit přímo v těle e-mailu (né jako příloha), je již zapotřebí dodržovat více pravidel.
U textových e-mailů není nijak složité vytvořit si vlastní funkci. Pokud ale máte za úkol odesílat e-maily ve stylu klasické internetové stránky – je praktičtější využít již vytvořené funkcionality. Asi nejznámější je třída PHPMailer.
$mail = new PHPMailer();
$mail->IsHTML(true);
Kódování češtiny v e-mailech byl vždy problém. Avšak nejvíce doporučovaným kódováním je ISO-8859-2. Pakliže máte stránky v jiném kódování doporučuji použít funkci iconv(), pokud ji váš hosting z nějakého důvodu nepodporuje, musíte využít převodní tabulky.
$mail->CharSet = 'ISO-8859-2';
$mail->Body = iconv('UTF-8', 'ISO-8859-2//TRANSLIT', $vystupMail);
$mail->AltBody = iconv('UTF-8', 'ISO-8859-2//TRANSLIT', $vystupText);
Jednalo se o mé první HTML e-maily, proto jsem se nejprve chtěl poučit z článků na internetu. Nakonec jsem ale stejně skončil u metody: „Pokus × Omyl.“
Pro vložení obrázku využíváme standardní tag <img>. Obrázek můžeme stáhnout z jiného serveru zadáním absolutní adresy (http://) do atributu src, e-maily se ale duplicitně zobrazují bez těchto obrázků a uživatel musí jejich stažení ručně povolit. Druhou variantou je přiložit obrázek přímo do těla e-mailu zadáním cid:nazevCid do atributu src.
$mail->AddEmbeddedImage($cestaSouboru, $nazevCid, $nazevPriloha, 'base64', 'image/jpeg');
<td style="padding-left: 10px; border-left-width: 5px; border-left-style: solid; border-left-color: #FF0000; ">hello world</td>
Zde přišel kámen úrazu. Gmail zobrazuje pozadí nastavené atributem background v tabulce (obrázek se opakuje vždy na obou osách), pokud použijete background v CSS, ignoruje jej. Seznam reaguje přesně naopak. Kdo má čas, odzkoušejte si to – mě toto zjištění zabralo spousty času a testování. Výsledné řešení je vytvořit e-mail v tabulkách, využívat atributu background a připojit i CSS. Je to hrozné řešení, ale jediné účinné. Pro jistotu ještě jednou zopakuji, že background v HTML se opakuje na obou osách vždy, dbejte proto na správné sestavení tabulky. A nakonec, obrázek můžete volat buď externě či přes cid (viz výše).
<td width="200" height="50" background="cid:logo" bgcolor="#000000" style="background-color: #000000; background-image: url('
cid:logo
')">hello world</td>
Ahoj,
mam jeden dotaz. Zacal jsem pouzivat phpmailer a nepodarilo se mi doposud zprovoznit to, abych pouzil embeded obrazek jako pozadi v <td> nebo <table> apod. Nesetkal jsi se s timto problemem nebo nevis nahodou, kde by mohl byt problem. Hledal jsem hodne na netu, ale bohuzel zadne reseni jsem nenasel.
Dekuju.
Navigace
© 2008-25 Ondřej LUKÁŠ ~ ikony famfamfam ~ sxc.hu
Tento kód slouží k testování robotů vykrádajících obsah těchto stránek