phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法

 更新时间:2014年07月19日 16:57:23   投稿:shichen2014  
这篇文章主要介绍了phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法,该功能非常简单实用,需要的朋友可以参考下

很多人在使用phpmailer发送邮件之后,都想知道对方是否阅读了邮件?通常来说,这个我们是无法知道的,那么有没有办法呢?

对于这个问题有一个简单的解决方法,我们知道,邮件内容可以以html 的形式发送,我们可以在内容中插入图片,那么关键就在这个图片里面了。

假设我们的邮件内容是这样的:

文件content.php代码如下:

<table width="555" height="50" border="0" align="center" cellpadding="0" cellspacing="0" background="<?=$bg?>">
<tr>
 <td>这是测试内容</td>
   </tr>
   <tr>
 <td>&nbsp;</td>
   </tr>
   <tr>
 <td>&nbsp;</td>
   </tr>
 </table> 

这个$bg要怎么写呢?如果邮件是发送多个人呢?这里又怎么区分呢?

假设链接是这样的:http://www.xxx.com/image.php?email=$email 再看看image.php的代码

文件image.php代码如下:

<?php 
$email=$_GET["email"]; 
if($id) 
{ 
  include_once("/conn.php"); 
  mysql_query("update mail_list set has_read='yes' where email='$email'"); 
} 
header("Content/type:image/gif"); 
$im=imagecreatefromgif("bg.gif"); 
imagegif($im); 
imagedestroy($im); 
?>

看到这里你也许就明白了。所以我发送的邮件的内容就是这样的:

<?php 
ob_start(); 
include_once("content.php"); 
$content=ob_get_contents(); 
ob_end_clean(); 
?>

写到这里,我们并没有对邮件内容中的背景图像进行替换,接下来的问题将会逐步解决这个问题, 这个是用phpmail发送邮件的部分代码:

<?php 
/* 
$contact=array("userA"=>"aaaa@sina.com","userB""=>"bbb@163.com","userC"=>"ccc@qq.com"); 
*/ 
foreach ($contact as $unm=>$email) 
{ 
  $bg_file="http://{$_SERVER['SERVER_NAME']}/image.php?email=$email"; 
  $str=str_replace('background=""',"background=\"$bg_file\"",$content); 
  $mail->MsgHTML($str); 
  $mail->AddAddress($email,$unm); 
  $mail->Send(); 
} 
?>

这里为什么要用循环的方式逐一发送呢?因为为了区分是哪个联系人读过邮件,每封邮件的内容的背景图片的显示不一样。在发送之前,我们对内容进行处理,对背景进行替换,这样我们看到的邮件内容的背景图像的src就变成了这样:http://www.domain.com/image.php?email=aaa@sina.com等等。

注意这里还有一个问题,你执行上面的代码之后,会发现一个问题,发送到第一个人的是3封,第二个人的是2封,第三个人的是1封,这里为什么呢?这里就要看看AddAddress方法了。修改办法是:打开class.phpmailer.php,找到310行,将private $to=Array()改成public $to=Array().

然后在发送邮件的代码中加入:

$mail->to=Array();
$mail->AddAddress($email,$unm);

写到这里,就不用再做过多说明了。

相关文章

  • php对数组内元素进行随机调换的方法

    php对数组内元素进行随机调换的方法

    这篇文章主要介绍了php对数组内元素进行随机调换的方法,通过自定义函数实现对数组内元素进行随机调换的功能,涉及php操作数组的相关技巧,需要的朋友可以参考下
    2015-05-05
  • php常用的安全过滤函数集锦

    php常用的安全过滤函数集锦

    由于越来越多的项目开始使用框架,所以,很多的程序员也不在关心安全的问题!因为框架已经帮我们几乎完美的处理了!但是,个人认为,我们还是需要了解一下常用的安全处理函数!
    2014-10-10
  • php封装pdo实例以及pdo长连接的优缺点总结

    php封装pdo实例以及pdo长连接的优缺点总结

    在本篇文章里小编给大家整理的是一篇关于php封装pdo实例以及pdo长连接的优缺点总结内容,对此有兴趣的朋友们可以跟着学习下。
    2021-12-12
  • PHP实战之投票系统的实现

    PHP实战之投票系统的实现

    这篇文章主要为大家介绍了如何利用PHP制作一个投票系统,文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起学习一下
    2022-04-04
  • PHP获取系统毫秒数时间方法

    PHP获取系统毫秒数时间方法

    这篇文章主要介绍了PHP获取系统毫秒数时间方法,php中获取时间方法是date(),在php中获取时间戳方法有time()、strtotime(),文章通告主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • PHP删除目录及目录下所有文件的方法详解

    PHP删除目录及目录下所有文件的方法详解

    本篇文章是对PHP删除目录及目录下所有文件的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 原生JS实现Ajax通过GET方式与PHP进行交互操作示例

    原生JS实现Ajax通过GET方式与PHP进行交互操作示例

    这篇文章主要介绍了原生JS实现Ajax通过GET方式与PHP进行交互操作,涉及javascript ajax交互及php数据接收、处理与数据库查询相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • php读取mysql乱码,用set names XXX解决的原理分享

    php读取mysql乱码,用set names XXX解决的原理分享

    解决乱码的方法,我们经常使用“set names utf8”,那么为什么加上这句代码就可以解决了呢?下面跟着我一起来深入set names utf8的内部执行原理
    2011-12-12
  • php debug 安装技巧

    php debug 安装技巧

    软件开发的断点调试是必不可少,这里介绍ubuntu10.04中eclipse工具中php的调试配置。
    2011-04-04
  • Fatal error: ''break'' not in the ''loop'' or ''switch'' context in Function.php

    Fatal error: ''break'' not in the ''loop'' or ''switch'' con

    PHPexcel报出错误Fatal error: 'break' not in the 'loop' or 'switch' context in Function.php on line 463.,需要的朋友可以参考下
    2021-06-06

最新评论