使用PHP如何知道电子邮件是否已发送成功?

3
我正在通过PHP脚本发送一堆电子邮件,我想分析每个邮件的结果,以便知道它是否被成功投递。有没有办法通过PHP实现这个功能呢?

2
看一下这个链接:https://dev59.com/RErSa4cB1Zd3GeqPZdCC - greenLizard
3个回答

4
你可以确认邮件已经发送出去,但要确认它是否被送达是另一回事。实际上,我想不出任何一种方法可以确认邮件已被送达而不检查它是否被阅读,可以通过包含一个 1x1 的 .gif 图片的链接来请求您的服务器并记录已访问的方式或者用户必须访问以查看消息的完整内容的链接来检查它是否被阅读。两者都不能保证(并非所有电子邮件客户端都会显示图像或使用 HTML),并非所有“已交付”的消息都会被阅读。当然,你可以监控你的 reply-to 邮箱地址,如果有邮件退回,那就可以肯定地说这条信息未被送达。

是的,我认为检查反弹邮件将是最好的方法。谢谢。 - ragebunny

3

如果邮件已发送,则可以轻松地检测到,但要检测其是否已送达则是另一回事。

您可以在电子邮件中实现一个1像素的图像,该图像托管在您的网站上。当然,该图像由PHP创建,因此您可以为其分配唯一的ID以便检测该图像是否已被加载。如果禁用缓存,则甚至可以检测邮件被阅读的次数。

创建此类图像的方式如下:

   header('Content-Type: image/png');
   $im = @imagecreate(1, 1);
   $background_color = imagecolorallocate($im, 255, 255, 255);  // make it white
   imagepng($im,"image.png");
   imagedestroy($im);

将以下内容存储在名为image.php(或其他任何名称)的页面中。同时在数据库中存储已发送电子邮件的信息,并为其创建一个唯一的ID(md5或sha1哈希算法可能很好)。如下所示:
$id = sha1([ID FROM DATABASE] + salt)

还需要将此信息存储在电子邮件的行中。

然后使用ID链接到图像。

<img src="http://www.example.com/image.php?id=SHA1HASHHERE" />

通过这种方式,您可以跟踪


2

没有一种真正好的方法 - 但是,您可以嵌入一个包含电子邮件地址和日志请求的url的图像。


因为有跟踪退信电子邮件的方法可以实现这一点。 - Lukas Liesis
@LukasLiesis 这并不能告诉你邮件是否真正被送达,它只是一个指示器。 - thejh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接