แล้วถ้าจะแก้ปัญหาที่ปลายเหตุ(ชั่วคราวก่อนระบบ utf-8 จะใช้กันแพร่หลาย)
คือ class.phpmailer.php
จะสามารถแปลงสายอักขระ กลางอากาศ(on the fly) จาก utf-8 ->tis-620 ได้มั้ยครับ
อ้อ
วันนี้ผมลองแก้ปัญหาด้วยแนวทางของผมเอง ดังนี้ครับ(แต่ก็ยังไม่ได้ 100%)
ท้าวความถึงสาเหตุที่พบ
เนื่องจากเวลาส่งเมล์มันจะอ่านภาษาไทย ไม่ออก เพราะ ค่าภาษาไทย จริงๆไม่ได้ gen จาก phpmailer แต่เอามาจาก thai.php ของ joomla
แล้ว ไฟล์ thai.php ก็ถูกเซพเป้น utf-8 แล้วไม่มีทางที่เอนโค้ด tis-620 จะอ่านมันออกแน่นอน
ผมจึงทำดังนี้ครับ (คิดว่าดันทุรังได้พอตัวครับ)
1.แยก คำสั่ง ที่ pre define ออกเป็น 2 ส่วน คือส่วนของระบบ กับส่วนในจดหมาย คือ
Code:
DEFINE('_ERROR_PASS','ขออภัย, ไม่พบสมาชิกรายนี้');
DEFINE('_NEWPASS_MSG','สมาชิกชื่อ $checkusername มีอีเมล์ในการสมัครเป็นสมาชิก\n'
.'ของเว็บไซต์ $mosConfig_live_site มีการร้องขอให้ส่งรหัสผ่านใหม่ให้\n\n'
.' รหัสใหม่ของคุณคือ: $newpass\n\nหากคุณไม่ได้ร้องขอให้ระบบจัดส่งอีเมล์นี้มาให้\ไม่ต้องเป็นกังวล.'
.' เพราะไม่มีคนอื่นทราบ รหัสผ่านจะถูกส่งมาทางอีเมล์ของคุณเท่านั้น. ถ้าอันนี้เกิดจากความผิดพลาดเข้าสู่ระบบ'
.' ของรหัสผ่านใหม่ของคุณ จากนั้นคุณสามารถเปลี่ยนรหัสผ่านตามที่คุณต้องการได้เอง.');
DEFINE('_SEND_SUB','รายละเอียดสมาชิกใหม่ %s ใน %s');
DEFINE('_USEND_MSG_ACTIVATE', 'สวัสดีคุณ %s,
ขอบคุณสำหรับสมัครสมาชิกที่ %s. บัญชีของคุณถูกสร้างแล้ว และคุณจะต้องทำการยืนยันตัวคุณ(Activateก)ก่อน
จึงจะใช้ได้ หากต้องการยืนยัน คลิก link ข้างล่างนี้หรือ คัดลอกแล้วไปวางในช่อง address ในเบราซ์เซอร์ของคุณ:
%s
หลังจากยืนยันแล้วคุณสามารถเข้าสู่ระบบ %s โดยใช้ ชื่อผู้ใช้ และรหัสผ่าน ตามนี้:
ชื่อผู้ใช้ - %s
รหัสผ่าน - %s');
DEFINE('_USEND_MSG', "สวัสดีคุณ %s,
ขอบคุณสำหรับสมัครสมาชิกที่ %s.
คุณสามารถเข้าสู่ระบบได้เดี๋ยวนี้ เข้าใช้งาน %s ด้วย ชื่อผู้ใช้ และ รหัสผ่าน ที่คุณได้ลงทะเบียนไว้ ");
DEFINE('_USEND_MSG_NOPASS','สวัสดีคุณ $name,\n\n คุณได้เพิ่มเป็นสมาชิกในเว็บไซต์ $mosConfig_live_site.\n'
.'คุณสามารถเข้าสู่ระบบเว็บไซต์ $mosConfig_live_site ด้วย ชื่อผู้ใช้ และ รหัสผ่าน ที่คุณได้ลงทะเบียนไว้\n\n'
.'กรุณาอย่าตอบกลับข้อความนี้ เพราะเป็นข้อความอัตโนมัติจากระบบและมีวัตถุประสงค์เพื่อส่งข่าวสารเท่านั้น\n');
DEFINE('_ASEND_MSG','สวัสดีคุณ %s,
มีสมาชิกใหม่ลงทะเบียนมายัง %s.
อีเมล์นี้มีรายละเอียดของสมาชิก:
ชื่อ - %s
อีเมล์ - %s
ชื่อผู้ใช้ - %s
กรุณาอย่าตอบกลับข้อความนี้ เพราะเป็นข้อความอัตโนมัติจากระบบและมีวัตถุประสงค์เพื่อส่งข่าวสารเท่านั้น');
?>
ส่วนอื่นๆของที่เหลือจะเป็นของระบบผมจะไม่พูดถึง (อ้อที่เอามานี่จะเกี่ยวกัยการ กู้พาสเวอร์ดคืน ส่วนที่ส่งเมล์อื่นๆยังไม่ได้ลองนะครับ)
นำข้อความดังกล่าวข้างต้นไปเซพใน format - ansi (แบบทั่วๆไปนั่นแหละครับ) ในชื่อไฟล์ thaimail.php ส่วนไฟล์ thai.php ก็เซพเท่าที่เหลือเป็น utf-8 เหมือนเดิม
2.include ไฟล์ที่สร้างขึ้นใหม่ใน index.php ของระบบ ของผมบรรทัดที่ 140
ต่อจาก
Code:
include_once( $mosConfig_absolute_path .'/language/' . $mosConfig_lang . '.php' );
เพิ่มเป็น
Code:
include_once( $mosConfig_absolute_path .'/language/' . $mosConfig_lang . '.php' );
include_once( $mosConfig_absolute_path .'/language/' . $mosConfig_lang . 'mail.php' );
3.ไปแก้ บรรทัด 36 ในไฟล์ class.phpmailer.php
Code:
var $CharSet = "utf-8";
เป็น
Code:
var $CharSet = "iso-8859-11";
พอแก้เสร็จก็พอไปได้ครับ เละบ้าง แต่สำหรับเมล์บางที่มันจะแสดงผลเป็นภาษาไทยได่เลย
ใครพอจะต่อยอดไอเดียนี้ คิดว่าพอไหวมั้ยครับ
_________________
Tel 085-073-6776 ติดปัญหา Joomla ตรงไหนรับปรึกษาฟรี โทรมาเถอะครับ.
http://www.apartment.in.th ค้นหาให้เช่าที่พักของประเทศไทย.
http://www.jwebengine.com/freeweb UnlimitedSpace+FreeHost+FreeDomain ขอทดลองใช้ได้