PHP brak polskich znaków w E-mailu

0

Witam serdecznie, napisalem prosty skrypt php pobierający z formularza dane i wysyłający za ppomocą mail() e-maila na dany adres. W skrypcie php przy wyświetlaniu tekstu (pomiędzy znacznikami <html></html>) polskie znaki są. Polskich znaków nie ma natomiast w meilu, do którego ten skrypt go wysłał. Oto kod skryptu:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zapytanie zostało wysłane</title>
</head>

<body>
	<?php
		//Utworzenie nazw zmiennych
		$imie_nazwisko = $_POST['imie_nazwisko'];
		$email = $_POST['email'];
		$temat = $_POST['temat'];
		$tresc = $_POST['tresc'];
		//Zdefiniowanie danych statycznych
		$adres_do = "[email protected]";
		
		$zawartosc_email = "Nazwa klienta: ".$imie_nazwisko."\n"
							."Adres pocztowy: ".$email."\n"
							."Wiadomość: \n".$tresc."\n";
							
		//Wywołanie funkcji mail() wysyłającej wiadomość pocztową
		mail($adres_do, $temat, $zawartosc_email);
	?>
    Wysłano!
</body>
</html>

Po wysłaniu meila (skrypt ten odpalam z serwera) odbieram meila, na który została wysłana wiadomość i w tym odebranym meilu brak polskich znaków. Ktoś wie jak temu zaradzić? Czy zmienić coś w php.ini? Pozdrawiam

0

Dodaj header, który określi jakiego kodowania używasz.

	$imie_nazwisko = $_POST['imie_nazwisko'];
	$email = $_POST['email'];
	$temat = $_POST['temat'];
	$tresc = $_POST['tresc'];

	$zawartosc_email = "Nazwa klienta: ".$imie_nazwisko."\n"
                                                        ."Adres pocztowy: ".$email."\n"
                                                        ."Wiadomość: \n".$tresc."\n";                                   

	$adres_do = "[email protected]";
	$adres_od = "[email protected]";

	$headers  = 'MIME-Version: 1.0' . "\r\n";
	$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
	$headers .= 'From: '.$adres_od.''."\r\n";

	mail($adres_do,$temat,$zawartosc_email,$headers);

i jeszcze jedna uwaga, po wywołaniu funkcji mail(), nie zawsze wiadomość może się wysłać. dlatego warto się zabezpieczyć:

	$tmp = mail($adres_do,$temat,$zawartosc_email,$headers);
	if($tmp) echo 'Wysłano!';
	else echo 'Wystąpił błąd';
0

Działa! Wielkie dzięki za pomoc! Serdecznie pozdrawiam
PS. Tylko teraz nie działa znak nowej linii \n w zawartości meila...

0

Content-type: text/html;

Użyj nl2br.

0
Demonical Monk napisał(a)

Content-type: text/html;

Użyj nl2br.

Że wcześniej na to nie wpadłem... Dzięki! Problem na tym poście rozwiązany gruntownie. Dzięki

0

Witam, mam podobny problem z tym że kodowanie jest podane a i tak nie ma polskich znaków...

           $headers = "MIME-Version: 1.0" . "\r\n";
           $headers .= "Content-type:text/html; charset=UTF-8" . "\r\n";
           $headers .= 'From: CK Wiatrak - Newsletter <[email protected]>' . "\r\n";
           $headers .= 'Reply-to: CK Wiatrak - Newsletter <[email protected]>' . "\r\n";
           $subject = 'ŁŚŻÓŁĆŹ';
           $message = 'ŁŚŻÓŁĆŹ';

           if(mail($to,$subject,$message,$headers)){echo "wyslano";} 

Co najzabawniejsze w treści wiadomości polskie znaki się pojawiają - w temacie nie... gdzie robię błąd?

0

Bo temat musi być inaczej zakodowany, np to: Subject: =?utf-8?B?TGlzdGEgTmFqbcOzdyBwxYJhdG55Y2g=?= oznacza Lista Najmów płatnych. Nawet nie wnikam jak to jest kodowane. Mail może być kodowany na wiele sposobów, załączniki również, zamiast zastanawiać się co i jak i dlaczego i na co i po co - polecam użyć biblioteki do wysyłki maili np. phpMailer. I życie staje się prostsze. Nie trzeba koła od nowa wymyślać ;)

0

mailera stosuje obecnie - moim zadaniem jest poprawienie błędu w starszej aplikacji i szczerze powiedziawszy za mało płacą żeby się z tym babrać - myślałem że po prostu gdzieś jest ewidentnie mój błąd i dlatego źle koduje ale widać to jest bardziej skomplikowane ;/
Czy nie można ustawić kodowania dla całego maila? w jaki sposób jest tworzony ten temat?

0

Dobra, nakierowałeś mnie i znalazłem:

$temat= "=?UTF-8?B?".base64_encode("Temat z ogonkami ęóąśłżźćń")."?=";

Wniosek:
Kodowanie tematu jest porypane;/

0

Kolejny problem do rozwiązania...

Dlaczego jeśli w temacie używam ampersand'a (&) to po wysłąniu wiadomości w temacie pojawia mi się &amp; ?
Przyznam szczerze że nie znam się na base64 a chciałbym mieć poprawne tematy mail;/
Jakieś podpowiedzi?

0

to nie wina base64 - gdzieś wcześniej musiałeś użyć htmlspecialchars, albo czytasz bezpośrednio z QUERY_STRING lub coś podobnego
poza tym już dawno byś to przepisał na phpmailera zamiast się bawić kilka dni z gołym standardem

1 użytkowników online, w tym zalogowanych: 0, gości: 1