ตรวจสอบว่า email ที่ส่งไปผู้รับได้เปิดอ่านไหมด้วย php

 

 

    สามารถทำการตรวจสอบได้ โดยการส่ง 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

<?php
mysql_connect("localhost", "root", "root");
mysql_select_db("unzeen");

// function ที่จะใช้ทำการส่ง email แบบ HTML
function mail_html($to,$subject,$message){
    $headers  = "MIME-Version: 1.0n";
    $headers .= "Content-Type: text/html; charset=tis-620n";
    $headers .= "To: $ton";
    $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 แล้วจะใช้เป็น rn อันนี้ต้องลอง เขียนแล้วส่งดูเอง นะครับ ว่าแบบไหน ที่ส่งออกไปแล้วได้ ผลออกมาเป็น HTML แต่ใน คู่มือของ PHP ก็บอกว่าต้องใช้ rn แต่ผมลองกับ server ที่ผมใช้แล้วกลับใช้ไม่ได้ แต่พอตัดให้เหลือ n อย่างเดี่ยวกลับส่ง ออกเป็น HTML ออกไปได้ แปลกดี

หลังจากที่เราเขียนโปรแกรม ส่ง email แล้วคราวนี้เรามาเขียนโปรแกรม เพื่อทำการรับค่าเวลาที่ผู้รับเปิดอ่าน email กันบ้าง โดยในที่นี้ผมจะใช้รูปขนาด 1 * 1 Pixel เพราะว่าผมแค่ต้องการรับค่า กลับมาดูเฉยๆ ว่าเขาเปิด email อ่านหรือยัง ส่วนใครจะไปใช้รูปอะไรก็แล้วแต่ท่านนะครับ

ตัวอย่างโปรแกรมตรวจสอบการอ่าน email checkemail.php
 

<?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

 

เครดิต http://www.srenon.buriram-zone.net/index.php

Related posts:

บทความที่เกี่ยวข้อง

  • No Related Post
This entry was posted in ความรู้ทั่วไปในเรื่อง IT. Bookmark the permalink.