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编程效率的53个要点(经验小结)
Sep 04 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
php写的AES加密解密类分享
Jun 20 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 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中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python 初始化多维数组代码
2008/09/06 Python
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
python生成器表达式和列表解析
2016/03/10 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
进修护士自我鉴定
2013/10/14 职场文书
生产厂长岗位职责
2014/02/21 职场文书
一份文言文检讨书
2014/09/13 职场文书
通讯稿格式及范文
2015/07/22 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang