yes if I increase the field size in the DB and change the max limit in Mail.php has solved the issue but
I think i found the real cause which is the lines
$mail = new Mail();
$mail->template = substr($template, 0, 62);
$mail->subject = substr($subject, 0, 254);
$mail->id_lang = (int)$id_lang;
as long as the email subject size is less then the max value then things works fine.
I guess there is something is wrong with trimming the text when it is oversize so if I simply change it to
$mail->subject = substr($subject, 0, 253); it will works fine, i have checked the resulted Thai text and it has the Unicode FFFD
at the end of the trimmed string.
string(254) ยืนยันการสั่�"
note that this bug is never produced when I use English version even if I choose very long shop name.