Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:检查谁读过发送的电子邮件?_Php - Fatal编程技术网

PHP:检查谁读过发送的电子邮件?

PHP:检查谁读过发送的电子邮件?,php,Php,我正在向一些用户发送电子邮件,并想知道谁读过,这意味着如果有人读过该电子邮件,那么将保留一个日志文件,其中包含该用户的电子邮件地址以及日期/时间/IP。 为此,我发送了一个带有电子邮件(html模板)的javascript函数,当用户打开该电子邮件时,它只会提醒用户的电子邮件地址,如: for($n=0; $n<sizeof($checkBox); $n++){ $mail = new PHPMailer(); $mail->IsHTML(true);

我正在向一些用户发送电子邮件,并想知道谁读过,这意味着如果有人读过该电子邮件,那么将保留一个日志文件,其中包含该用户的电子邮件地址以及日期/时间/IP。 为此,我发送了一个带有电子邮件(html模板)的javascript函数,当用户打开该电子邮件时,它只会提醒用户的电子邮件地址,如:

for($n=0; $n<sizeof($checkBox); $n++){
        $mail = new PHPMailer();
        $mail->IsHTML(true);
        $mail->Subject = $subject;
        $function = "<script language='javascript'>function stats(emailId){alert(emailId);}</script>";
        $bodyOpen = "<body onload='stats(".$checkBox[$n].");'>"; 
        $msg_body .= $body .= "<table><tr><td>Hello Everyone</td></tr></table></body>";
        $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();
    }
for($n=0;$nIsHTML(true);
$mail->Subject=$Subject;
$function=“函数统计(emailId){alert(emailId);}”;
$bodyOpen=“”;
$msg_body.=$body.=“大家好”;
$mail->Body=$function.$bodyOpen.$msg\u Body;
$mail->WordWrap=50;
$mail->FromName='Muhammad Sajid';
$mail->IsMAIL();
$mail->Fromwebspot49@gmail.com';
$mail->AddAddress($checkBox[$n]);
$sent=$mail->Send();
}
html模板工作正常,并在页面加载时显示一个警报弹出窗口,但如果我使用它发送此html模板,它将不起作用

我只想用PHP5.x.x/javascript来解决这个问题,没有其他软件或第三方工具。
有什么帮助吗?

像这样在电子邮件中发送一个灯塔图像

<img src='http://www.yourserver.com/beacon.php?email_id=$email_id&email_address=$user_address' style='width:1px;height:1px'>

然后使用beacon.php文件记录数据。然后,您将希望输出一个带有适当标题的1X1图像


重要提示
许多流行的电子邮件客户端(如Gmail)现在阻止外部图像,所以这是目前为止,不是傻瓜式的。

这是不可能的定义。

邮件阅读器不是浏览器,他们不支持javascript。他们甚至不支持正确的CSS,所以不要期望太多。所以我真的看不到任何方法可以做你想做的事情。

这几乎不可能做到100%的效果富丽

  • 您可以控制内容的存储位置,例如,并在电子邮件中提供指向该内容的链接,然后您可以检测何时查看该URL

  • 使用MailChimp和其他时事通讯活动使用的方法,在电子邮件中放置一个不可见的图像,该图像应位于您控制的服务器上,然后您可以在用户打开电子邮件时检测该图像何时被击中


  • 您无法将javascript添加到电子邮件中。
    唯一的解决方案是在电子邮件中只有一个链接,并且邮件在服务器上,这样您就可以知道邮件本身已被查看。

    向电子邮件添加标题:

    Disposition-Notification-To: you@yourdomain.com
    
    如上所述,它不可靠,最好这样做:

    <img src="http://yourdomain.com/emailreceipt.php?receipt=<email of receiver>" />
    

    但它与上面的处置通知方法相同。

    我只添加了一行:

    $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();
    }
    
    $dt=date('F\jS\,\Y h:i:sa');
    对于($n=0;$nIsHTML(真);
    $mail->Subject=$Subject;
    $src=”“;
    $msg_body.=$src.=“大家好”;
    $mail->Body=$function.$bodyOpen.$msg\u Body;
    $mail->WordWrap=50;
    $mail->FromName='Muhammad Sajid';
    $mail->IsMAIL();
    $mail->Fromwebspot49@gmail.com';
    $mail->AddAddress($checkBox[$n]);
    $sent=$mail->Send();
    }
    
    readmail.php文件中,只需插入日期/时间和带有复选框的用户ID(如果不存在附加的日期/时间)&只修复Gmail、hotmail,而不修复Yahoo。。。 有人能帮雅虎解决这个问题吗

    哈哈。 愚蠢的错误只是使用完整的url,如:

    $src = "<img src='http://www.msajid.isgreat.org/readmail.php?dt=".$dt."&eid=".$checkBox[$n]."' />";
    
    $src=”“;
    

    它也适用于Yahoo….

    嵌入用户特定的图像(1px空白可能更好)在电子邮件中记录它是否热是一个公平的解决方案。但是像Gmail这样的问题客户端默认会阻止外部图像。

    请参阅有关MDN的更多详细信息。

    由于上一篇文章已经发布了一段时间,我不确定这种方法是否仍然有效

    我在运行PHP5.4.30的服务器上测试了这个方法,它似乎没有输出图像

    这是一些非常简单的代码:

    <img src="http://theservername.com/myaccount_email_read_offline.php">
    
    
    
    请注意,我从该图像中删除了querystring和任何其他代码

    打开这个单独的页面,myaccount\u email\u read\u offline.php确实显示了这个图像


    但是,试图通过在其位置包含一个PHP文件来包含该图像是不起作用的。

    尽管我没有确切地发现为什么简单的PHP文件没有生成包含的图像(如我6小时前的帖子所述),这里是生成图像文件的另一种非常复杂的方法,它没有被我自己的PHP5.4.30 web服务器拒绝

    下面是我放入/email\u image/子目录中index.php文件的代码:

    <?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;
    ?>
    
    在email\u image文件夹中还有一个名为“message\u open\u tracking.gif”的1x1 gif空白图像

    还可以修改index.php文件,以利用邮件id将该邮件标记为已读。如果查询字符串中包含其他变量,例如收件人的电子邮件地址,则这些值也可以在该index.php文件中使用

    非常感谢Bennett Stone的以下文章:
    我知道这是一个古老的线索,但我必须作出回应……对于我们中的那些必须考虑这一点的人,我建议我们自己来代替那些不得不编写反垃圾邮件软件的人来阻止我们的努力。检测一个或一个.php(或其他脚本/二进制扩展)作为一个假想的“垃圾邮件刺客”程序员,图像标签的内部对我来说是微不足道的…就像识别1x1图像一样

    我花了2.5年的时间为一场总统竞选活动担任国家数字总监,在我们有候选人之前就筹集了2000万美元——以下是我为那场竞选活动开发的内容:

  • 在发送时(或之前),在收件人:电子邮件地址上生成哈希,并将其存储在电子邮件地址旁边的数据库中

  • 使用我们刚刚生成的哈希修改电子邮件中一个小但清晰可见的徽标,并在徽标文件名中使用哈希复制徽标,例如:emxlogox.0FAE7E6.png-在电子邮件中引用该徽标的唯一图像-在文件名中使用哈希名称复制徽标。此部分
    <?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;
    ?>
    
    http://mywebsite.com/email_image/?message_id=12345