การส่งเมลด้วย PHP

ผมเขียนโปรแกรมให้มีการส่งอีเมลถึงผู้สอนโดยอัตโนมัติ เมื่อมีการลงทะเบียนเรียนวิชาของผู้สอนคนนั้น ๆ
เมื่อวาน อาจารย์ศรีเชาวน์ วิหคโต บอกว่า อีเมลที่ส่งไปให้ ในส่วนชื่อเรื่องอ่านไม่ออก ไม่รู้ว่าส่งมาเรื่องอะไร แต่ข้อความอ่านได้
อาจารย์ศรีเชาวน์ใช้ Hotmail
ผมเชคดูกับอาจารย์สุวัฒน์ ก็พบว่า ใช้ Hotmail เหมือนกัน แต่อ่านออก
ผมเลยไปค้นดูว่า ฟังก์ชั่น mail() ของ PHP มันเป็นยังไงแน่
ก็พบว่า ในส่วน subject ของ Header ของเมล โปรแกรม PHP
ไม่มีการ encode ทำให้มีปัญหากับภาษาที่ไม่ใช่ภาษาอังกฤษ ส่งเมลไปแล้วผู้รับอ่านหัวข้อเรื่อง (subject) ไม่ออก
ผมค้นดูพบว่ามีคนพูดไว้หลายคน และมีฟังก์ชั่นที่นำมาใช้แล้วได้ผล ดังนี้

<?php
$charset = “Windows-874” // ภาษาไทย
$to = encode(“ชื่อผู้รับ”, $charset) . ” “;
$from = encode(“ชื่อผู้ส่ง”, $charset) . ” “;
$subject = encode(“ชื่อเรื่องที่ส่งอีเมล”, $charset);
$message = “does not need to be encoded – ไม่ต้อง encode”;
mail($to, $subject, $message, $from);

function encode($in_str, $charset) {
$out_str = $in_str;
if ($out_str && $charset) {

// define start delimimter, end delimiter and spacer
$end = “?=”;
$start = “=?” . $charset . “?B?”;
$spacer = $end . “\r\n ” . $start;

// determine length of encoded text within chunks
// and ensure length is even
$length = 75 – strlen($start) – strlen($end);
$length = floor($length/2) * 2;

// encode the string and split it into chunks
// with spacers after each chunk
$out_str = base64_encode($out_str);
$out_str = chunk_split($out_str, $length, $spacer);

// remove trailing spacer and
// add start and end delimiters
$spacer = preg_quote($spacer);
$out_str = preg_replace(“/” . $spacer . “$/”, “”, $out_str);
$out_str = $start . $out_str . $end;
}
return $out_str;
}
// for details on Message Header Extensions
// for Non-ASCII Text see …

?>

แหล่งที่มา:
http://th.php.net/mb_send_mail
http://surachartopun.com/2006/04/function-php-for-encode-subject-mail.html

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: