Autor | Zpráva | ||
---|---|---|---|
Stepanka Profil * |
#1 · Zasláno: 19. 9. 2008, 12:40:20
Ahoj,
prosím nevěděl by někdo, jak odeslat mail, který má subject s diakritikou? (samozřejmě aby to nebyly samé otazníky či jiné patvary). Zatím mám toto: $from = __HLAVNI_EMAIL__; $komu = $_POST['komu']; $predmet = $_POST['predmet']; $text_emailu = $_POST['text_emailu']; $headers = "From: " . $from . "\n"; $headers .= "Return-Path :" . $from . "\n"; $headers .= "Reply-To :" . $from . "\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=utf-8\n"; $headers .= "Content-Transfer-Encoding: 8bit\n"; $headers .= "X-MSMail-Priority: High\n"; $headers .= "X-Mailer: w-shop powered by PHP / " . phpversion(); if (mail($komu, $predmet, $text_emailu, $headers)) { echo "<br /><span class=\"b\">E-mail Sent.</span><br />"; } A text emailu mi to formátuje pěkně. Ale předmět ne. Prošla jsem si všechny příklady v diskuzi na http://cz2.php.net/function.mail, ale vždy se mi poslal mail, který měl v předmětu (v tom lepším případě) skoro samé otazníky (v tom horším to byly neidentifikovatelné hieroglyfy).. Moc děkuji za případné rady. |
||
Suji Profil |
#2 · Zasláno: 19. 9. 2008, 12:46:52
Tohle me zlobilo do okamziku, kdy jsem zacal pouzivat na posilani PHP Mailer.
|
||
Suji Profil |
#3 · Zasláno: 19. 9. 2008, 12:47:31
|
||
Stepanka Profil * |
#4 · Zasláno: 19. 9. 2008, 12:50:16
Suji
ok, díky, jak je to free, tak vyzkouším... |
||
nightfish Profil |
#5 · Zasláno: 19. 9. 2008, 12:58:52
|
||
Stepanka Profil * |
#6 · Zasláno: 19. 9. 2008, 13:54:38
Je to nějaké zvláštní...
Mám v kódu toto: if (isset ($_POST['odeslat_email'])) { require ('./PHP Mailer/class.phpmailer.php'); $mail= new PHPMailer(); // defaults to using php "mail()" $body = $_POST['text_emailu']; $body = eregi_replace("[\]",'',$body); $mail->From= __HLAVNI_EMAIL__; $mail->FromName= "First Last"; $mail->Subject = $_POST['predmet']; $mail->AltBody = $_POST['text_emailu']; // optional, comment out and test $mail->MsgHTML($body); $mail->AddAddress($_POST['komu'], "John Doe"); $mail->AddAttachment("images/phpmailer.gif"); // attachment if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; } } třídy mám nakopírované, proměnné obsahují správná data, ale ještě jsem se nedostala přes hlášku: Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /www/doc/www.webconsult.cz/www/ben-int/e-shop/admin/PHP Mailer/class.phpmailer.php on line 45 |
||
Stepanka Profil * |
#7 · Zasláno: 19. 9. 2008, 13:57:16
Přitom na tom řádku je
public $Priority = 3; |
||
BetaCam Profil |
#8 · Zasláno: 19. 9. 2008, 14:14:45 · Upravil/a: BetaCam
Stepanka
„Přitom na tom řádku je public $Priority = 3; ... nechápu co po mě chce..“ řekl bych, že to po tobě chce PHP5, ale je to bez záruky. Jaké pak PHP máš na serveru?? |
||
Stepanka Profil * |
#9 · Zasláno: 19. 9. 2008, 14:18:34
BetaCam
Když dám echo phpversion(); |
||
BetaCam Profil |
#10 · Zasláno: 19. 9. 2008, 14:25:48 · Upravil/a: BetaCam
Stepanka
V tom případě si musíš stahnou PHPMailer který je určený pro PHP4 : PHPMailer pro PHP 4 PHP 4 nezná nic jako public, protected, private, static, abstract atd. |
||
Stepanka Profil * |
#11 · Zasláno: 19. 9. 2008, 14:28:31
BetaCam
Ok, děkuji mockrát! |
||
Stepanka Profil * |
#12 · Zasláno: 19. 9. 2008, 14:34:43
Ještě přemýšlím... nezdá se mi to moc perspektivní, protože ve verze PHP může měnit..
Zkouším třeba toto: $from = __HLAVNI_EMAIL__; $komu = $_POST['komu']; $predmet = $_POST['predmet']; $text_emailu = $_POST['text_emailu']; $headers = "From: " . $from . "\n"; $headers .= "Return-Path :" . $from . "\n"; $headers .= "Reply-To :" . $from . "\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=utf-8\n"; $headers .= "Content-Transfer-Encoding: 8bit\n"; $headers .= "X-MSMail-Priority: High\n"; $headers .= "X-Mailer: w-shop powered by PHP / " . phpversion(); function zakoduj($text) { return "=?utf-8?B?".base64_encode($text)."?="; } $predmet = zakoduj($predmet); if (mail($komu, $predmet, $text_emailu, $headers)) { echo "<br /><span class=\"b\">E-mail Sent.</span><br />"; } a funguje mi to zatím docela pěkně. Ale stejně - jak to má člověk testovat, aby si nemusel na každém serveru zakládat schránku? |
||
Stepanka Profil * |
#13 · Zasláno: 19. 9. 2008, 15:38:46
Ok, mám PHP Mailer pro PHP 4. A funguje bez errorů.. Ale nezná třeba kurzívu. Když si napíšu mail ve tvaru <em><strong>NEJAKY MAIL</strong></em>, kurzívu ignoruje. stejně tak jiné barvy písma nezobrazí, jen černou.. Přitom kód by měl být správně.. Nevíte někdo kde by mohla být chyba?
require ('./PHP4 Mailer/class.phpmailer.php'); $mail = new PHPMailer(); $mail->IsHTML(true); // tento řádek je zbytečný, protože níže nastavujeme obsah proměnné AltBody $mail->Body = $_POST['text_emailu']; //$mail->AltBody = "Alternativní textový obsah pro e-mail, bez HTML značek"; $mail->AddAddress($_POST['komu']); // přidáme příjemce //$mail->AddAddress("druhy.prijemce@example.net", "Jméno druhého příjemce"); // a klidně i druhého, včetně jména $mail->From = __HLAVNI_EMAIL__; $mail->FromName = __HLAVNI_EMAIL__; $mail->Subject = $_POST['predmet']; // nastavíme předmět e-mailu $mail->Body = $_POST['text_emailu']; // nastavíme tělo e-mailu $mail->WordWrap = 50; // je vhodné taky nastavit zalomení (po 50 znacích) $mail->CharSet = "utf-8"; // nastavíme kódování, ve kterém odesíláme e-mail if(!$mail->Send()) { // odešleme e-mail echo 'Došlo k chybě při odeslání e-mailu.'; echo 'Chybová hláška: ' . $mail->ErrorInfo; } else { echo 'E-mail byl v pořádku odeslán.'; } |
||
BetaCam Profil |
#14 · Zasláno: 19. 9. 2008, 15:46:13
Stepanka
„Ještě přemýšlím... nezdá se mi to moc perspektivní, protože ve verze PHP může měnit..“ Tomu moc nerozumim. Ale pokud ti jde o to že by ti PHPMailer přestal fungovat, když se změní PHP na verzi 5 tak mám takovej pocit, že s největší pravděpodobností bude fungovat PHPMailer pro PHP4 i na PHP5. Navíc pokud by si to chtěla mít na beton tak může udělat třeba konstrukci : if (floor(phpversion()) < 5) { require_once 'PHPMailer4.php'; } else { require_once 'PHPMailer5.php'; } Kde PHPMailer4.php je soubor s třídou určenou pro PHP4 a PHPMailer5.php je soubor s třídou určenej pro PHP5 |
||
Stepanka Profil * |
#15 · Zasláno: 19. 9. 2008, 16:04:29
BetaCam
Jasně, mě pak taky napadlo, že to pojede asi i v PHP5.. Nechám teda ten mailer. I když si ještě budu muset pohrát s tou kurzívou atd.. Děkuju za rady. |
||
Stepanka Profil * |
#16 · Zasláno: 19. 9. 2008, 16:14:17
BetaCam
No ale že by se mi to zdálo nějaké vymakané, to teda ne :-) Když pošlu mail na adresu "bščgrdž", napíše mi, že email byl úspěšně odeslán.. |
||
Měsíček Profil |
#17 · Zasláno: 19. 9. 2008, 16:16:21
"No ale že by se mi to zdálo nějaké vymakané, to teda ne :-) Když pošlu mail na adresu "bščgrdž", napíše mi, že email byl úspěšně odeslán.."
A není u PHP - maileru nějáké nastavení? :-) |
||
Stepanka Profil * |
#18 · Zasláno: 19. 9. 2008, 16:22:00
Měsíček
prošla jsem ty třídy a jiné skripty, co ta složka obsahuje, ale nic jsem nenašla.. |
||
BetaCam Profil |
#19 · Zasláno: 19. 9. 2008, 16:25:52 · Upravil/a: BetaCam
Stepanka
„No ale že by se mi to zdálo nějaké vymakané, to teda ne :-) Když pošlu mail na adresu "bščgrdž", napíše mi, že email byl úspěšně odeslán..“ Nevim nemohu říct jestli tato třída testuje zda je email ve správném tvaru. Tuto třídu totiž sám osobně nepoužívám. Navíc testovat email regulárem před jeho vložením do třídy si může udělat celkem bez problému každý sám. |
||
Stepanka Profil * |
#20 · Zasláno: 19. 9. 2008, 16:26:43
možná jsem náročný uživatel, ale když mu zadám tělo mailu ve tvaru
<div align="right"><font color="#ff0000"><em><strong>Ahoj</strong></em></font></div> |
||
nightfish Profil |
#21 · Zasláno: 19. 9. 2008, 16:32:08
„ale když mu zadám tělo mailu ve tvaru “
neměl by mít HTML e-mail něco jako <html><body>...</body></html>? jinak problém je způsoben zřejmě tím, že se e-mail neposílá jako HTML... tzn. že není nastaveno AltBody nebo není zavoláno $mail->IsHTML() |
||
Stepanka Profil * |
#22 · Zasláno: 19. 9. 2008, 17:16:20
nightfish
html a body jsem doplnila, ale pořád bere jen tučné písmo, jiné úpravy ne.. Kód vypadá takto: $mail = new PHPMailer(); $mail->IsHTML(true); // tento řádek je zbytečný, protože níže nastavujeme obsah proměnné AltBody $mail->Body = '<html><body>'.$_POST['text_emailu'].'</body></html>'; $mail->AltBody = ""; $mail->AddAddress($_POST['komu']); // přidáme příjemce //$mail->AddAddress("druhy.prijemce@example.net", "Jméno druhého příjemce"); // a klidně i druhého, včetně jména $mail->From = __HLAVNI_EMAIL__; $mail->FromName = __HLAVNI_EMAIL__; $mail->Subject = $_POST['predmet']; // nastavíme předmět e-mailu $mail->Body = $_POST['text_emailu']; // nastavíme tělo e-mailu $mail->WordWrap = 50; // je vhodné taky nastavit zalomení (po 50 znacích) $mail->CharSet = "utf-8"; // nastavíme kódování, ve kterém odesíláme e-mail if(!$mail->Send()) { // odešleme e-mail echo 'Došlo k chybě při odeslání e-mailu.'; echo 'Chybová hláška: ' . $mail->ErrorInfo; } else { echo 'E-mail byl v pořádku odeslán.'; } Ale všimla jsem si, že místo <em> funguje <i>.. |
||
nightfish Profil |
#23 · Zasláno: 19. 9. 2008, 17:29:53
nightfish
„tzn. že není nastaveno AltBody nebo není zavoláno $mail->IsHTML()“ přehlédl jsem, to tam už je jinak Body s <html><body>... tam sice máš, ale pak si ho o pár řádků níž přepíšeš jinak já používám <b> a <i> a žádný problém - je fakt, že <strong> a <em> jsem nezkoušel |
||
Stepanka Profil * |
#24 · Zasláno: 19. 9. 2008, 17:34:13
nightfish
S <b> a <i> mi to funguje taky pěkně, ale používám FCK editor a on mi vkládá <em>. <strong> už potom nevadí, to se zobrazí pěkně. Jenom <em> dělá chyby.. Zkusím to v tom FCK editoru nějak upravit, aby vkládal <i> místo <em>... A děkuju za rady |
||
BetaCam Profil |
#25 · Zasláno: 19. 9. 2008, 17:39:06
Stepanka
„Zkusím to v tom FCK editoru nějak upravit, aby vkládal <i> místo <em>... A děkuju za rady“ No v nejhoršim případě pokud to nenajdes v FCK editoru. tak to můžeš pro tenhle případ (Odesílání mailu) vyměnit nějakym jednoduchym regulárem. Je to sice řešení přes ruku, ale v nejhoršim případě to de udělat i tak. |
||
Stepanka Profil * |
#26 · Zasláno: 19. 9. 2008, 17:57:06
BetaCam
Jo, zkouším to nastavit napevno. Ale je to zvláštní.. Když zadám napevno $mail->Body = '<div align="right"><font color="#ff0000"><i><strong>Ahoj</strong></i></font></div>'; zobrazí se to v mailu úplně krásně, přesně tak jak má... Ale když si v tom editoru napíšu "Ahoj", zformátuju stejně jako výše (tzn. když zobrazím kód v tom editoru, mám: <div align="right"><font color="#ff0000"><em><strong>Ahoj</strong></em></font></div> A pak dám do kódu $text_emailu = $_POST['text_emailu']; $text_emailu = str_replace("<em>","<i>",$text_emailu); $text_emailu = str_replace("</em>","</i>",$text_emailu); $mail->Body = '<html><body>'.$text_emailu.'</body></html>'; Tak mi to stejně nebere. Tučné písmo a kurzívu to zobrazí. Ale pravé zarovnání a červené písmo ne. Přitom když je to napevno (jak píšu na 2. řádku) tak to funguje.. |
||
Stepanka Profil * |
#27 · Zasláno: 19. 9. 2008, 18:01:15
Když si to nechám poslat (v tom druhém případě) jako čistý text, přijde mi
<html><body><div align=\"right\"><font color=\"#ff0000\"><i><strong>Ahoj</strong></i></font></div></body></html> Takže rozdíl bude asi v těch backslashích.. Ale jak je všechny odebírat, nevíte? To už přes str replace dělat nemůžu.. |
||
Stepanka Profil * |
#28 · Zasláno: 19. 9. 2008, 18:07:27
Aha, stipslashes :-) Tak už mi to funguje docela pěkně...
|
||
Časová prodleva: 16 let
|
0