Autor | Zpráva | ||
---|---|---|---|
leorond Profil |
Ahoj, mám menší problém s diakritikou v mailech.
Vytvořil jsem si tento script <?php if(isset($_POST["odeslat"])) { if (!JeEmail($_POST["mail"])) $err = "Není zadán platný e-mail"; elseif(strlen($_POST["text"])<1) $err1 = "Musíte zadat zprávu!"; else $email = 'josifek.dvori@seznam.cz'; $vysledek = mail($email, $_POST["predmet-1"]." : ".$_POST["mail"], "\n".$_POST["mail"]."\n\n".$_POST["text"]); if ($vysledek) $ok = '<font size=4><b>Mail byl úspěšně odeslaný!</b></font>'; else $err2 = 'Mail se neodeslal!'; } ?> mezi head jsem vložil <meta charset="utf-8">
ale když odešlu mail tak tam mám špatnou diakritiku Mohl by mi někdo poradit? Právě jsem to vyřešil touto funkcí :) děkuji autorovy ;) <?php function autoUTF($s) { if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) // detect UTF-8 { return $s; } elseif (preg_match('#[\x7F-\x9F\xBC]#', $s)) // detect WINDOWS-1250 { return iconv('WINDOWS-1250', 'UTF-8', $s); } else // 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".PHP_EOL; $head .= "Content-Type: text/plain; charset=\"utf-8\"".PHP_EOL; $head .= "Content-Transfer-Encoding: base64".PHP_EOL; $zprava = wordwrap(base64_encode(autoUTF($zprava)), 78, PHP_EOL, true); return mail($to, $predmet, $zprava, $head); } ?> |
||
leorond Profil |
Ale ještě bych se zeptal na takovou maličkost, co kdybych do mého skriptu chtěl z DB vypsat třeba 10 mailových adres a odeslat tak hromadný mail všem uživatelům? Vím že je potřeba použít "," za každou mailovou adresou ale když ji tam vložím tak se mail neodešle. Dělám něco špatně?
<?php if(isset($_POST["odeslat"])) { $result = mysql_query("SELECT email FROM aktuality"); while($row = mysql_fetch_assoc($result)) $vysledek = cs_mail($row["email"], $_POST["predmet-1"]." : ".$_POST["mail"], "\n".$_POST["mail"]."\n\n".$_POST["text"]); if ($vysledek) $ok = '<font size=4><b>Mail byl úspěšně odeslaný!</b></font>'; else $err2 = 'Mail se neodeslal!'; } ?> A jak bych mohl odstranit ze zpráv <p>,... když používám tiny_mce Tak jsem doma, mail se odešle pouze pokud je to prostý text, když zadám třeba tučné písmo tak mám smolíka. |
||
Tomáš123 Profil |
#3 · Zasláno: 13. 11. 2015, 14:12:23
leorond:
„Vím že je potřeba použít "," za každou mailovou adresou ale když ji tam vložím tak se mail neodešle.“ A zadávaš to v správnom formáte? „A jak bych mohl odstranit ze zpráv <p>,... když používám tiny_mce“ str_replace("<p>", "", $message); „Tak jsem doma, mail se odešle pouze pokud je to prostý text“ Odosielaš e-mail s hlavičkou text/html ?
|
||
leorond Profil |
Bože je možný že jsem takovej ... :D no jistě že tam mám text/plain :D
člověk jde písmeno po písmenu a ona je to taková prkotina |
||
Dan Charousek Profil |
#5 · Zasláno: 13. 11. 2015, 15:23:05
leorond:
V PHP se dá explicitně validovat emailová adresa pomocí filter_var()
$email = "bob@example.com"; if(filter_var($email, FILTER_VALIDATE_EMAIL)) { // validní email } else { /* nevalidní email */} Nemusíš tedy používat vlastní řešení, které mnohdy nepokryje všechny případy (nebo naopak pokryje jich víc než by mělo). Tomáš123: „ str_replace("<p>", "", $message); “
A co uzavírací značka? leorond: Na odstraňování html tagů existuje přímo funkce strip_tags(); |
||
leorond Profil |
No dejme tomu že používám tinymce a chtěl bych tam ty HTML značky nechat?
Například bych tam vložil něco takového $zprava = "<html><body>"; $zprava .= htmlspecialchars($_POST['text']); $zprava .= "</body></html>"; $vysledek = cs_mail_1("mail@mail.cz", $_POST["predmet"], $zprava, "From: ".strip_tags($row["email"])."".PHP_EOL); Bude to fungovat? Nebo dělám něco špatně? |
||
Slark Profil * |
#7 · Zasláno: 15. 11. 2015, 19:52:44
Pokud používáte tinymce, tak si odstraňte htmlspecialchars a bude vám html výstup fungovat i v emailu, takže zpráva bude jen $_POST['text'].
|
||
leorond Profil |
#8 · Zasláno: 15. 11. 2015, 22:48:38
Ano vím jen jsem musel udělat ještě pár úprav a to
$zprava = $_POST['text']; $vysledek = cs_mail_1("mail@mail.cz", $_POST["predmet"], "<html><body>".$zprava."</body></html>", "From: ".strip_tags($row["email"])."".PHP_EOL); takto mi to funguje v pořádku. Co kdybych chtěl odesílat mail více uživatelům? Potřeboval bych vypsat třeba 100 řádků mailů z mysql , to zvládám ale jak to udělat aby se mi za každou takto vypsanou mailovou adresu vložila čárka? Případně pokud bude za každou adresou čárka, odešle se mail i v případě že za poslední adresou bude čárka také?
|
||
juriad Profil |
#9 · Zasláno: 15. 11. 2015, 23:01:15
Slyšel jsi někdy o funkci implode?
|
||
leorond Profil |
#10 · Zasláno: 15. 11. 2015, 23:20:44
Vypadá to zajímavě, ano něco jsem o tom četl ale moje angličtina není moc obstojná a tak z toho mám spíše guláš.
Mohl bys mi trošku nastínit jednoduchý příklad s menším popisem? |
||
leorond Profil |
Tak mám takovíto výsledný skript který funguje a nefunguje, pošle mi email pokud v něm není HTML což nechápu. Používám tinymce a mělo by to odeslat v pořádku nebo snad ne?
<? if(isset($_POST["MAIL"])) { $result = mysql_query("SELECT email FROM kontakt"); while($row = mysql_fetch_assoc($result)) $vysledek = cs_mail_1("josifek.dvori@seznam.cz", $_POST["predmet"], "<html><body>".$_POST['text']."</body></html>", "From: ".strip_tags($row["email"])."".PHP_EOL); echo "Zpráva byla odeslána"; } ?> <form action="#" method="POST"> <input type="text" name="predmet" placeholder="Předmět..."><br><br> <textarea name="text"></textarea><br><br> <input type="submit" name="MAIL" value="Odeslat"> </form> nebo by byla chyba zde? function cs_mail_1($to, $predmet, $zprava, $head = "") { $predmet = "=?utf-8?B?".base64_encode(autoUTF($predmet))."?="; $head .= "MIME-Version: 1.0".PHP_EOL; $head .= "Content-Type: text/html; charset=\"utf-8\"".PHP_EOL; $head .= "Content-Transfer-Encoding: base64".PHP_EOL; $zprava = wordwrap(base64_encode(autoUTF($zprava)), 78, PHP_EOL, true); return mail($to, $predmet, $zprava, $head); } |
||
Časová prodleva: 7 let
|
0