I am sending email to some users and wants to know who had read it, means if some one had read that email then a log file will maintain which contain the email address of th
Mailreaders are not browsers, they don't support javascript. They don't even support proper CSS so dont expect too much. So I honestly don't see any way you can do what you're trying to do
Add Header to email:
Disposition-Notification-To: you@yourdomain.com
As mentioned above it's not reliable and it's better to do something like this:
<img src="http://yourdomain.com/emailreceipt.php?receipt=<email of receiver>" />
And log it in a database, although again this is restricted by the email client's ability to show images and sometimes it may even put the mail into junk because it doesn't detect an image... a workaround that would be to actually outputting an image (say your logo) at the end of that script.
Edit: A quick lookup at the phpmailer class gave me the following:
$mail->ConfirmReadingTo = 'yourown@emailaddress.com';
but it's the same as the Disposition-Notification-To method above.
It is not possible by definition.
I just add a single line:
$dt = date('F \ jS\,\ Y h:i:s a');
for($n=0; $n<sizeof($checkBox); $n++){
$mail = new PHPMailer();
$mail->IsHTML(true);
$mail->Subject = $subject;
$src = "<img src='msajid.isgreat.org/readmail.php?dt=".$dt."&eid=".$checkBox[$n]."' />";
$msg_body .= $src .= "<table><tr><td>Hello Everyone</td></tr></table>";
$mail->Body = $function.$bodyOpen.$msg_body;
$mail->WordWrap = 50;
$mail->FromName = 'Muhammad Sajid';
$mail->IsMAIL();
$mail->From = 'webspot49@gmail.com';
$mail->AddAddress($checkBox[$n]);
$sent = $mail->Send();
}
and in readmail.php file simply insert date/time and userid with a check (if not exist with attached date/time) & fixed it only for Gmail, hotmail but not for Yahoo... Can some one help to also fix for Yahoo....?
Haaaa. silly mistake just use complete url like:
$src = "<img src='http://www.msajid.isgreat.org/readmail.php?dt=".$dt."&eid=".$checkBox[$n]."' />";
and it will also work for Yahoo....
You can't add javascript to your emails.
The only solution would be to have only a link in the email, and the message on the server, Then you'd able to know that the message itself has been viewed.
While I didn't discover exactly why the simple PHP file wasn't generating the included image (as mentioned in my post 6 hours ago), here is another very complicated way of generating an image file that wasn't rejected by my own PHP 5.4.30 web server.
Here is the code that I put into an index.php file within an /email_image/ subdirectory:
<?php
$message_id = $_REQUEST['message_id'];
$graphic_http = 'http://mywebsite.com/email_image/message_open_tracking.gif';
$filesize = filesize( 'message_open_tracking.gif' );
header( 'Pragma: public' );
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Cache-Control: private',false );
header( 'Content-Disposition: attachment; filename="a_unique_image_name_' . $message_id . '.gif"' );
header( 'Content-Transfer-Encoding: binary' );
header( 'Content-Length: '.$filesize );
readfile( $graphic_http );
exit;
?>
For the image filename, I used the following:
http://mywebsite.com/email_image/?message_id=12345
Within the email_image folder is also a blank 1x1 gif image named "message_open_tracking.gif".
The index.php file can also be revised to make use of the message_id in order to mark that message as having been read. If other variables are included within the querystring, such as the recipient's email address, those values can also be used within that index.php file.
Many thanks to Bennett Stone for the following article: http://www.phpdevtips.com/2013/06/email-open-tracking-with-php-and-mysql/