2009-11-12 10 views
6

Wysyłam biuletyn przez PHP mail() w języku hiszpańskim, mają akcenty i znaki specjalne (które mam zamiar wkleić tutaj: á, í, é, ñ. ..).Wysyłaj wiadomości e-mail z międzynarodowym akcentem i znakami specjalnymi

Dla wersji HTML wiadomości e-mail, myślę, że ten problem rozwiązać, drukując á, é ...

dla zwykłego wersji tekstowej, zakładam jednak, że nie można umieścić te, prawda?

Co jest najlepszą rzeczą do zrobienia, zarówno dla wersji HTML, jak i zwykłego tekstu? Później może będę musiał wysłać e-maile w bardziej skomplikowanych językach, takich jak hebrajski lub chiński ...

Dzięki!

Odpowiedz

23

Musisz użyć MIME. Dodawanie nagłówków pocztowych:

MIME-Version: 1.0 
Content-Type: text/plain;charset=utf-8 

(Jeśli już przy użyciu MIME multipart/alternative umieścić HTML i tekst w tym samym mail umieścić Content-Type: text/plain;charset=utf-8 na sub-nagłówkami części tekstu zamiast.)

Zakłada się, że kodowanie, do którego będziesz wysyłał swoje "międzynarodowe" znaki, to kodowanie UTF-8. Jeśli spodziewasz się obsługiwać wiele krajów, kodowanie UTF-8 jest jedynym rozsądnym wyborem do zastosowania w całej aplikacji, ale jeśli jeszcze tak naprawdę nie myślałeś o tym, Twoja witryna może nie być zgodna z kodowaniem w Europie Zachodniej. Sprawdź, czy rzeczy takie jak chińskie znaki działają poprawnie w Twojej witrynie i bazie danych, zanim zaczniesz się martwić o nich w poczcie.

Wykolejenie: istnieją lokalizacje, w których wysyłanie wiadomości w UTF-8 nie jest najskuteczniejsze. Nie wiem nic o Chinach, ale w Japonii wciąż istnieją pewne wsteczne i niedorzeczne systemy pocztowe (szczególnie webmail), które nie radzą sobie z Unicode i zamiast tego trzeba podać kodowanie specyficzne dla lokalizacji, takie jak Shift-JIS. Jeśli koncentrujesz się na tych rynkach, często będziesz musiał używać iconv do tworzenia specjalnie zakodowanych wersji wiadomości. Nieprzyjemny.

Teraz, ponieważ wiele serwerów pocztowych nie może poradzić sobie ze znakami spoza zestawu ASCII w treści wiadomości, trzeba je zakodować. Możesz wybrać quoted-printable lub base64 dla tego; quoted-printable jest zazwyczaj mniejsze i bardziej czytelne dla treści, które zawiera znaki ASCII w nim też:

Content-Type: text/plain;charset=utf-8 
Content-Transfer-Encoding: quoted-printable 

Hello! An a-acute is =C3=A1 

Funkcja zakodować w tym formacie jest quoted_printable_encode. Jednak potrzebujesz rozsądnie zaktualizowanego PHP, aby uzyskać tę funkcję; jeśli go nie masz, możesz zamiast tego ustawić Content-Transfer-Encoding na base64 i użyć base64_encode.

Wreszcie, jeśli chcesz zawierać znaków spoza ASCII w nagłówkach (na przykład w From, To lub Subject), jest zupełnie inna składnia:

Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?= 

przypadku gdy QW...== bałagan w środku jest base64_encode z "An a-acute is á" w UTF-8.

+0

Ta "zupełnie inna składnia" to kodowanie "B" RFC2047. Generalnie lepiej jest używać kodowania "Q" z tego samego RFC, ponieważ jest zwykle bardziej czytelny (podobnie jak cytowany-do wydruku) i krótszy. PHPMailer obsługuje oba i ogólnie jest o wiele lepszym sposobem na uporządkowanie kodowania niż próba zrobienia tego od zera - do czego służą biblioteki! – Synchro

1

Znaki akcentowane, takie jak á, í, é, ñ, działają na zwykłym tekście dla większości domyślnych ustawień encoing przeglądarki.

Azjatyckie jak chińskie postacie zazwyczaj będą śmieciami.

Tak, zwykły tekst + HTML to zalecany sposób.

1

Jeśli treść wiadomości e-mail jest zakodowana jako UTF-8, a wysyłasz wiadomość e-mail w formacie UTF-8, nie powinieneś używać specjalnej obsługi znaków międzynarodowych w części HTML lub Text.

+3

Jak upewnić się, że mój e-mail jest wysyłany w formacie UTF-8? –

Powiązane problemy