PHPMailer i tytuł wiadomości w UTF-8
Wygląda na to, że znana wszystkim i wykorzystywana przez wielu biblioteka phpmailer nie wystrzegła się błędów. Zresztą trudno się dziwić przy tak wielkich projektach. Jak to się mówi: „Nie ma programów bez błędów, są tylko programy źle sprawdzone”.
Błąd, o którym piszę związany jest z tytułami wiadomości zakodowanymi w UTF-8. Gdy przekraczają pewną długość biblioteka phpmaile zdaje się gubić i zwraca błąd „Language string failed to load: instantiate”. Na szczęście problem ten daje się rozwiązać i to dość łatwo. Wystarczy zakodować temat wiadomości używając base64:
-
$mail = new PHPMailer();
-
$mail->CharSet = ‚utf-8’;
-
$mail->Subject = „=?UTF-8?B?”.base64_encode(str_replace(
-
array(„\r”, „\n”, „\r\n”, „\n\r”, „\t”),
-
array(”, ”, ”, ”, ”),
-
‚temat wiadomości’
-
)).”?=”;
-
$mail->Body = ‚treść wiadomości’;
-
$mail->Subject = „=?UTF-8?B?”.base64_encode(str_replace(
-
$mail->AddAddress(’email odbiorcy’, ‚pełna nazwa odbiorcy’);
-
$mail->Send();
Ważne tutaj są linie od 3 do 7 włącznie. Można też zauważyć, że przy okazji z tematu wiadomości zostały wywalone znaki ENTER i TAB.