Autor Zpráva
Stepanka
Profil *
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
Tohle me zlobilo do okamziku, kdy jsem zacal pouzivat na posilani PHP Mailer.
Suji
Profil
http://phpmailer.codeworxtech.com/index.php?pg=sf&p=dl
Stepanka
Profil *
Suji
ok, díky, jak je to free, tak vyzkouším...
nightfish
Profil
http://hrazdil.info/blog/15-posilani-mailu-v-php-pomoci-phpmaileru
Stepanka
Profil *
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 *
Přitom na tom řádku je
 public $Priority          = 3;
... nechápu co po mě chce..
BetaCam
Profil
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 *
BetaCam
Když dám
echo phpversion();
vypíše mi to 4.4.2-1build1_a24old_2
BetaCam
Profil
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 *
BetaCam
Ok, děkuji mockrát!
Stepanka
Profil *
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 *
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
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 *
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 *
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
"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 *
Měsíček
prošla jsem ty třídy a jiné skripty, co ta složka obsahuje, ale nic jsem nenašla..
BetaCam
Profil
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 *
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>
. Přijde mi mail se slovem Ahoj, které je jen tučně, bez kurzívy, bez zarovnání doprava a bez červené barvy :-(
nightfish
Profil
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 *
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
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 *
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
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 *
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 *
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 *
Aha, stipslashes :-) Tak už mi to funguje docela pěkně...

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: