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.