ตรวจสอบว่า email ที่ส่งไปผู้รับได้เปิดอ่านไหมด้วย php
ในการส่ง newsletter ไปให้สมาชิก หลายคนคงอยากจะตรวจสอบด้วยว่าสมาชิกคนไหนได้เปิด email ไปแล้วบ้าง วันนี้เราจะมาลองเขียนโปรแกรมส่ง newsletter ไปให้สมาชิกและทำการตรวจสอบด้วยว่าสมาชิกคนไหนได้ ทำการเปิด email แล้วบ้าง โดยจะใช้เทคนิคของการส่ง email แบบ HTML มาดูกันเลยดีกว่า
การจะตรวจสอบบว่า email ที่เราส่งออกไปนั้นผู้รับได้เปิดอ่านหรือยังเราสามารถทำการตรวจสอบได้ โดยการส่ง email ออกไปในรูปแบบของ HTML แล้วทำการแทรก tag <img src="http://www.myweb.com/checkemail.php?email=youremail"> เพื่อ ทำการส่งค่ากลับมาที่ website ของเราว่าผู้รับได้ทำการเปิด email แล้ว ซึ่งหลักการทำงานจะมีอยู่ว่า เมื่อผู้รับทำการเปิดอ่าน email ก็จะเป็นการไป load รูปภาพที่ http://www.myweb.com/checkemail.php ซึ่งอยู่ที่ website ของเราโดยเจ้า checkemail.php ตัวนี้จะรับค่ากลับมาด้วยว่า email ของใครเป็นคนเปิดอ่านและจะทำการบันทึกค่า ลง database ว่า email นี้ได้ทำการเปิด อ่านแล้ว จากนั้นก็จะทำการส่งรูปกลับไปเพื่อแสดงผลอีกครั้ง
ไม่รู้ว่าผมอธิบายแล้วจะงง หรือเปล่า ทางที่ดีมาดูตัวอย่างกันเลยดีว่า คิดว่าน่าจะเข้าใจง่ายกว่า
เริ่มแรกเราสร้าง database เพื่อทำการเก็บรายชื่อ email ของสมาชิกที่เราต้องการส่งไปหาก่อน โดยมีโครงสร้างตามนี้ครับ
STATUS | STATUS |
a@hotmail.com | No |
b@gmail.com | No |
c@yahoo.com | No |
จากตัวอย่างข้อมูลใน database นี้ เราสามารถเขียนโปรแกรม เพื่อทำการส่ง email และโปรแกรมเพื่อทำการตรวจสอบว่ามีการอ่าน email หรือยังได้ดังนี้
ตัวอย่างโปรแกรม ส่ง email
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?php mysql_connect("localhost", "root", "root"); mysql_select_db("unzeen"); // function ที่จะใช้ทำการส่ง email แบบ HTML function mail_html($to,$subject,$message){ $headers = "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/html; charset=tis-620\n"; $headers .= "To: $to\n"; $headers .= "From: khwanchai@gmail.com <khwanchai@gmail.com>\n"; $message = str_replace('\"', '"', $message); $message = str_replace("\'", "'", $message); mail($to_none, $subject, $message, $headers); } // อันนี้ Subject ของ email $subject = "ทดสอบการส่ง email แบบ HTML"; // ตรงนี้ข้อมูลที่จะส่ง เป็น HTML $data = " <h1>ทดสอบการส่ง email แบบ HTML</h1> <br> และตรวจสอบว่าผู้รับได้ทำการเปิด email หรือยัง <br> "; // ก่อนทำการส่ง ให้เปลี่นค่า STATUS เป็น No ให้หมดก่อน $query = "UPDATE `member` SET `STATUS`='No' WHERE 1"; $result = mysql_query($query); // อ่านรายชื่อ email ใน database ออกมาส่งทีละคน $query = "SELECT * FROM `member`"; $result = mysql_query($query); while ($line = mysql_fetch_array($result)) { $email = $line["EMAIL"]; $data1 = $data."<img src='http://www.myweb.com/checkemail.php?email=".$email."' border='0'>"; mail_html($email,$subject,$data1); } ?> |
ข้อสังเกต จากตัวอย่างโปรแกรมส่ง email ที่ผมเขียนตรงนี้เป็นการส่ง email แบบ HTML จะเห็นว่าใน function mail_html ผมใช้ \n ในส่วนของ header แต่ในบาง server แล้วจะใช้เป็น \r\n อันนี้ต้องลอง เขียนแล้วส่งดูเอง นะครับ ว่าแบบไหน ที่ส่งออกไปแล้วได้ ผลออกมาเป็น HTML แต่ใน คู่มือของ PHP ก็บอกว่าต้องใช้ \r\n แต่ผมลองกับ server ที่ผมใช้แล้วกลับใช้ไม่ได้ แต่พอตัดให้เหลือ \n อย่างเดี่ยวกลับส่ง ออกเป็น HTML ออกไปได้ แปลกดี
หลังจากที่เราเขียนโปรแกรม ส่ง email แล้วคราวนี้เรามาเขียนโปรแกรม เพื่อทำการรับค่าเวลาที่ผู้รับเปิดอ่าน email กันบ้าง โดยในที่นี้ผมจะใช้รูปขนาด 1 * 1 Pixel เพราะว่าผมแค่ต้องการรับค่า กลับมาดูเฉยๆ ว่าเขาเปิด email อ่านหรือยัง ส่วนใครจะไปใช้รูปอะไรก็แล้วแต่ท่านนะครับ
ตัวอย่างโปรแกรมตรวจสอบการอ่าน email checkemail.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php mysql_connect("localhost", "root", "root"); mysql_select_db("unzeen"); // ตรวจสอบก่อนว่าตัวแปร $email มีค่ากลับมาด้วย if($email != ""){ // ตรวจสอบอีกครั้งว่า เป็น email ที่มีอยู่ใน database ของเรา $query = "SELECT * FROM `member` WHERE `EMAIL`='$email'"; $result = mysql_query($query); if(mysql_num_rows($result) == 1){ // ทำการ update STATUS ให้เป็น Yes $query = "UPDATE `member` SET `STATUS`='Yes' WHERE `EMAIL`='$email'"; $result = mysql_query($query); } // จากนั้นทำการส่งรูปที่เราเตียมไว้ ออกไป header("Content-type: image/png"); $im = @imagecreatefrompng("./images/check.png") or die("Cannot Initialize new GD image stream"); imagepng($im); imagedestroy($im); } ?> |
เพียงเท่านี้เราก็ สามารถที่จะตรวจสอบได้แล้วว่า email ที่เราส่งออกไปหาสมาชิกจำนวนมากๆ นั้นมีสมาชิกคนไหนได้เปิดอ่านแล้วบ้าง
มาดูตัวอย่างการแสดงผลใน email ต่างๆกัน
อันนี้ของ Hotmail
อันนี้ของ Gmail
ไม่มีความคิดเห็น:
แสดงความคิดเห็น