2013-05-23 10 views
6

Szukałem i szukałem rozwiązania tego problemu, ale bez skutku.Wiadomość php z kodowaniem utf-8 niepoprawnie wyświetla się w klientach poczty Microsoft.

Używam programu php do wysyłania wiadomości e-mail z mieszanym tekstem/html, zakodowanej w utf8. Oto odpowiedni kod:

$headers = "From: $fromPerson\r\n" . 
"Content-Transfer-Encoding: 8bit\r\n". 
"Reply-To: $fromPerson\r\n" . 
"Content-Type: multipart/alternative; boundary=". $mime_boundary_header. "\r\n" . 
"X-Mailer: PHP/" . phpversion(); 

$message = "$notice_text 

--$mime_boundary 
Content-Type: text/plain; charset='UTF-8' 
Content-Transfer-Encoding: 8bit 

$textEmail 

--$mime_boundary 
Content-Type: text/html; charset='UTF-8' 
Content-Transfer-Encoding: 8bit 

$htmlEmail 

--$mime_boundary--"; 

//mb_detect_encoding($message) returns UTF-8 
$mail_sent = @mail($to, $subject, $message, $headers); 

Wiadomości zawierają hiszpański wraz z tymi trudnymi znakami. E-maile wyświetlają się dobrze w Gmailu, hotmailu (online outlook), mac-mail, telefonach itp., Ale nie w wiadomościach na żywo Windows lub Microsoft.

Jeśli ręcznie ustawić domyślną czcionkę w Windows Live Mail na utf8 komunikat wyświetla się poprawnie, ale w przeciwnym razie nie. Jeśli przekażę wiadomość e-mail od innego klienta do programu Outlook lub Windows Live, wyświetla się również dobrze.

Mogę znaleźć pracę dookoła Jestem pewien, ale czy czegoś brakuje? Nie chcę polegać na odbiornikach, którzy wiedzą, jak zmienić kodowanie wiadomości, więc czy jest coś, co muszę dodać do wiadomości e-mail, aby zachęcić tych klientów do rozpoznawania kodowania?

Przepraszam, jeśli sprawa została rozwiązana gdzie indziej, i doceniam każdą radę. Wygląda na to, że powinienem po prostu użyć PHPMailera, aby sprawdzić, czy to rozwiąże problem, ale z osobistej ciekawości byłoby ciekawie dowiedzieć się, dlaczego tak się dzieje ...

+0

Czy konieczne jest zawijanie zestawu znaków? – arnaud576875

Odpowiedz

12

Nie jestem pewien, czy opakowanie ' zestaw znaków jest konieczny, a nawet poprawny. Spróbuj usunąć je:

Content-Type: text/plain; charset=UTF-8 
+0

Hej tam! Dziękuję, że do mnie wróciłeś! I tak, miałeś rację, usunięcie cytatów rozwiązało problem. Wygracie mój podziw i nieśmiertelne oddanie. (zredagowałem, ponieważ początkowo myślałem, że to nie działa ...) –

4

Modyfikacja odpowiedzi Riko sprawia, że ​​dla małego kodeksu czystsze.

$header_array = [ 
    "MIME-Version: 1.0", 
    "Content-type: text/html; charset=UTF-8", 
    "From: [email protected]", 
    "Reply-To: [email protected]" 
]; 

$headers = implode("\r\n", $header_array); 
Powiązane problemy