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 相关文章推荐
PHP脚本的10个技巧(6)
Oct 09 PHP
PHP教程 变量定义
Oct 23 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
Yii2 输出xml格式数据的方法
May 03 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 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分页时出现的Fatal error的解决方法
2011/04/18 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
php批量删除操作代码分享
2017/02/26 PHP
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
在Python的Django框架中编写编译函数
2015/07/20 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Python实现学生成绩管理系统
2020/04/05 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
区分python中的进程与线程
2020/08/13 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
2014年党支部承诺书
2014/05/30 职场文书
长城英文导游词
2015/01/30 职场文书
大学毕业生自我评价
2015/03/02 职场文书
企业计划生育责任书
2015/05/09 职场文书
离职信范本
2015/06/23 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书