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

พฤษภาคม 6, 2009

ผมเขียนโปรแกรมให้มีการส่งอีเมลถึงผู้สอนโดยอัตโนมัติ เมื่อมีการลงทะเบียนเรียนวิชาของผู้สอนคนนั้น ๆ
เมื่อวาน อาจารย์ศรีเชาวน์ วิหคโต บอกว่า อีเมลที่ส่งไปให้ ในส่วนชื่อเรื่องอ่านไม่ออก ไม่รู้ว่าส่งมาเรื่องอะไร แต่ข้อความอ่านได้
อาจารย์ศรีเชาวน์ใช้ 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


Follow

Get every new post delivered to your Inbox.