ใช้ PHP ส่ง E-mail ได้ในฟังก์ชันเดียว E-mail เป็นบริการหนึ่งของ Internet ที่ได้รับความนิยมสูงสุด ด้วยความสะดวก รวดเร็ว และประหยัดในการส่งข้อความ ข้อมูล ทำให้ E-mail กลายเป็นสิ่งที่มีความจำเป็นอีกสิ่งหนึ่งในการติดต่อสื่อสาร
PHP เป็นอีกภาษาหนึ่งที่มีความสามารถในการส่ง E-mail ทำให้ผู้เขียน PHP สามารถทำการส่ง E-mail ได้ง่ายดาย ด้วยการทำงานเพียงแค่ใช้ฟังก์ชันเพียงฟังก์ชันเดียว
เราจะลองดูวิธีการกันครับ
รูปแบบ
mail( [To], [Subject], [Message], [Header] ); ความหมาย;
To : ข้อความใช้ระบุ E-mail Address ของผู้รับ
Subject : ข้อความ ใช้ระบุ Subject ที่ใช้ในการส่ง
Message : ข้อความ ใช้ระบุข้อความของ E-mail
Header : ข้อความ ใช้ระบุรายละเอียดต่าง ๆ ของ E-mail เช่น From: จาก E-mail ของผู้ส่ง , CC : สำเนา , BCC : สำเนาแบบซ่อน เป็นต้น
โดยในส่วนของ Header ไม่จำเป็นต้องระบุก็ได้ครับ ...
ดังนั้นจากรูปแบบเราสามารถเขียนเป็นโปรแกรมส่ง E-mail แบบง่าย ๆ ได้ดังนี้ครับ
<?php
mail( "webmaster@nachiengmai.net", "ทดสอบ", "ทดสอบการส่ง E-mail" );
?> ขอย้ำว่าแค่นี้ก็ใช้ส่งเมล์ได้ จริง ๆ นะครับ ... จะเห็นว่าง่ายมากเลย
ทีนี้เราลองมาดูโปรแกรมตัวอย่างต่อไปที่จะแสดงให้เห็นความสามารถของฟังก์ชัน
mail() อย่างเต็มรูปแบบครับ ... ตามนี้
<?php
//กำหนดชื่อ และ E-mail Address ของผู้รับ
$reci = "NaChiengmai.NET Webmaster <webmaster@nachiengmai.net>";
//กำหนด Subject ของ E-mail
$subj = "ทดสอบการส่ง E-mail จากภาษา PHP";
//กำหนดเนื้อความของ E-mail
$mess = "สวัสดีครับ\n\n:";
$mess .= "\t ขณะนี้ท่านกำลังอ่าน E-mail ที่ส่งด้วยการเขียนโปรแกรม PHP\n";
$mess .= "ที่ใช้ง่ายมากเลยครับ";
//กำหนดส่วนของ Header
$head = "From: Wacharapong <wacharapong@nachiengmai.net>\n";
$head .= "cc: Bhumi-rawich <bhumi@nachiengmai.net>\n";
$head .= "bcc: Chanyabhat <bhat@nachiengmai.net>\n";
//เอาค่าที่เราตั้งไว้ทำการส่ง
mail( $reci, $subj, $mess, $head )
or print "ไม่สามารถส่ง E-mail ได้";
?> คำอธิบายหลัก ๆ อยู่ Code แล้วล่ะครับ ... นอกจากนั้นก็ ...
เราจะใช้ .= ในการเชื่อมข้อความ 2 ข้อความ ... จำได้ไม๊ครับ ???
ส่วน \n จะใช้ในการขึ้นบรรทัดใหม่ และ \t จะทำการ Tab ไป 1 Tab ครับ ... ซึ่งทั้ง 2 ตัวจะแทรกอยู่ได้ระหว่างเครื่องหมาย " " เลย
ในส่วนของ Header นั้น อย่างที่บอกว่าจะมีหรือไม่มีก็ได้ครับ ... ถ้ามี ก็ไม่จำเป็นจะต้องมีครบ เช่น ต้องการแค่ระบุ From ก็ไม่ต้องใส่ CC และ BCC เป็นต้นครับ
จากตัวอย่าง จะทำให้เราสามารถประยุกต์ทำการส่ง E-mail ผ่านหน้าเว็บได้ครับ โดยที่เราจะสร้างเอกสาร 2 ตัวด้วยกัน
ตัวแรกเป็นเอกสารที่มีแบบฟอร์มเพื่อให้เรากรอกข้อความต่าง ๆ ซึ่งไม่จำเป็นต้องมีนามสกุลเป็น PHP แต่อาจจะเป็น HTML ธรมมดาก็ได้ครับ
เอกสารที่ 2 จะทำการรับค่าต่าง ๆ จากเอกสารที่ 1 มาทำการส่ง E-mail ... ลองทำดูครับ
Code ของเอกสารที่ 1 ผมตั้งชื่อว่า
mail.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>แบบฟอร์มส่ง E-mail ด้วย PHP</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
</head>
<body>
<form name="form1" method="post" action="mail.php">
<table width="329" border="1" cellspacing="2" cellpadding="5">
<tr>
<td width="92">To :</td>
<td width="205"><input name="reci" type="text" id="reci"></td>
</tr>
<tr>
<td>Subject :</td>
<td><input name="subj" type="text" id="subj"></td>
</tr>
<tr>
<td>From:</td>
<td><input name="from" type="text" id="from"></td>
</tr>
<tr>
<td>CC :</td>
<td><input name="cc" type="text" id="cc"></td>
</tr>
<tr>
<td>BCC :</td>
<td><input name="bcc" type="text" id="bcc"></td>
</tr>
<tr>
<td>Message :</td>
<td><textarea name="mess" id="mess"></textarea></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="ส่ง">
<input type="reset" name="Submit2" value="ล้างฟอร์ม"></td>
</tr>
</table>
</form>
</body>
</html> โดยที่ข้อมูลจากแบบฟอร์มนี้จะถูกส่งไปให้กับเอกสารชื่อ mail.php ตามที่ระบุไว้ในบรรทัดของ
FORM ที่ว่า ... action = "mail.php" ... ดังนั้นเราจึงจะต้องสร้างเอกสารที่สอง ที่ใช้ในการรับค่าจาก mail.html เพื่อทำการส่งเมล์ โดยใช้ชื่อว่า
mail.php ครับ ... Code เป็นแบบนี้
<?php
//สร้างตัวแปรใหม่เพื่อรับค่า Header
$nhead = "";
//เช็คว่า Header ตัวใดที่ทำการกรอกมาบ้าง
if $from != ""
nhead .= $from . "\n";
if $cc != ""
nhead .= $cc . "\n";
if $bcc != ""
nhead .= $bcc . "\n";
//ทำการส่ง
if $nhead != "" {
mail( $reci, $subj, $mess, $nhead )
or print "ไม่สามารถส่ง E-mail ได้";
}
else {
mail( $reci, $subj, $mess, )
or print "ไม่สามารถส่ง E-mail ได้";
}
?> Code นี้จะทำการตรวจสอบว่า Header มีการกรอกมาหรือไม่ ถ้า Header ตัวไหนไม่ได้กรอกมาก็จะทำการตัดออก หรือถ้าไม่ได้มีการกรอก Header มาเลยแม้แต่ตัวเดียวก็จะไม่ส่ง Header ไปครับ
แต่ Code นี้ยังไม่สมบูรณ์นัก เนื่องจากยังไม่ได้มีการตรวจสอบการกรอกข้อมูล ว่าตัวไหนต้องกรอกบ้าง เอาเป็นว่ากรอกให้ครบก็แล้วกันครับ ส่วน From , CC , BCC ไม่ต้องกรอกก็ได้ ... ทดสอบเฉย ๆ นะครับ
รับรองว่าถึงที่หมาย ... ไร้ปัญหาแน่ ...
ตรงนี้ผมไม่ได้เปิดให้ท่านทดสอบว่าส่งได้จริงหรือ ??? ... กลัวผู้ไม่หวังดีจะมาทดสอบด้วยนะครับ ... เดี๋ยวโดนซิวข้อหา ต้นตอ SPAM !!!
โดย ecurriculum.mv.ac.th