PHPMailer - Karakterkódolás

img

Ha PHPMailerben a feladó vagy a levél kódolása nem megfelelő, elég csúnya eredményeket kapunk. Még a nagyobb cégeknél is sokszor előfordul, hogy a kiküldött levél nagyon gáz. Ha nem megfelelően kódoljuk az emailt, akkor teljes lesz a káosz.

Fontos, hogy maga a generáló php fájl is ugyanolyan kódolásban legyen, mint amilyenben a kiküldött emailünk lesz. Ma már szerintem alap, hogy mindenhol UTF-8 kódolást használunk, nekem a program fel sem ajánlja, hogy más kódolásban hozzam létre a fileokat.

Másik fontos dolog, ha az emailben szereplő adatokat adatbázisból kérdezzük le, akkor az adatbázis kapcsolatot és az adatbázisokat is érdemes ugyanúgy UTF-8 kódolással létrehozni.

Használt beállítások

$mail=new PHPMailer(true);
$mail->CharSet='UTF-8';

Ennyire egyszerű, innentől kezdve megszűnnek az ilyen érdekes karaktereket tartalmazó levelek:

é = é

ĂĄ = á

Mégegyszer hangsúlyozom, hogy ez csak kifejezetten akkor működik, ha minden file és adat UTF-8 kódolással van elmentve. Egyéb esetben hasonló össze-visszaságot kaphatunk.

Néha előfordul, hogy a levelezők valamilyen oknál fogva, faragják a html kódot. Például html tag-eket vágnak ketté, szétbarmolják a html kódot. Erre pontos magyarázatot még nem találtam, de megoldást igen.

A teljes levelet az alap 8bit kódolás helyett base64-gyel küldjük el. Ilyenkor a levél tartalmát base64-be kódolja át a PHPMailer, és az email program kódolja vissza.

Nálam ez a "hiba" egy webshop megrendelésről kiküldött visszaigazoló emailben fordult elő. A ketté vágott tag-ek miatt a teljes levél szétcsúszott, lezáratlan tag-ek maradtak, tag töredékek szóródtak szét a szövegben.

Megoldás:

$mail=new PHPMailer(1);
$mail->CharSet='UTF-8';
$mail->Encoding='base64';

Így a Hotmail és a Gmail is jól jelenítette meg a levelemet, a kódom egyben érkezett meg és nem vágta szét a html tag-eket.