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.
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