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


Posted in PHP onJuly 19, 2014

很多人在使用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> </td>
   </tr>
   <tr>
 <td> </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 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
php防盗链的常用方法小结
Jul 02 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
PHP7匿名类用法分析
Sep 26 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
PHP执行linux命令6个函数代码实例
Nov 24 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 #PHP
CodeIgniter中实现泛域名解析
Jul 19 #PHP
php实现建立多层级目录的方法
Jul 19 #PHP
PHP实现图片压缩的两则实例
Jul 19 #PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 #PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 #PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 #PHP
You might like
用php来检测proxy
2006/10/09 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
3分钟学会一个Python小技巧
2018/11/23 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
Django中URL的参数传递的实现
2019/08/04 Python
Python socket 套接字实现通信详解
2019/08/27 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
python闭包与引用以及需要注意的陷阱
2020/09/18 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
酒店执行总经理岗位职责
2013/12/15 职场文书
个人职业生涯规划书1500字
2013/12/31 职场文书
学生干部的自我评价分享
2014/01/18 职场文书
会计系毕业求职信
2014/08/07 职场文书
2014年资料员工作总结
2014/11/18 职场文书
童年读书笔记
2015/06/26 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android
Linux磁盘管理方法介绍
2022/06/01 Servers
TS 类型兼容教程示例详解
2022/09/23 Javascript