有没有办法确定电子邮件是否到达了目的地?

8

我有一个发送关键电子邮件的PHP脚本。我知道如何检查电子邮件是否成功发送。但是,有没有一种方法可以验证电子邮件是否到达了目的地?


1
我非常想回答:在电子邮件中添加一个链接,上面写着“如果您没有收到此邮件,请点击这里”。 - Robert K
那将是太棒了。我可以报告所有电子邮件的100%成功率! :) - Marcel
12个回答

9
如果您基于HTML制作电子邮件,您可以在其中包含图像,这些图像包含唯一于收件人的信息的URL。您可以构建应用程序,以便这些URL触发某些代码将特定电子邮件标记为已读,然后返回所需的图像数据。
为了完全有效,图像必须成为电子邮件的关键部分,以便收件人不得不让其电子邮件客户端抓取图像。您还可以使电子邮件的纯文本部分只包含检索完整消息的URL,从而再次允许您跟踪接收情况。
您采取这些想法的程度取决于您需要知道它已被阅读的原因以及您希望在多大程度上通过无法剪切和粘贴、在移动设备上轻松阅读、使用屏幕阅读器等方式可能会惹恼收件人的电子邮件中实现此目的。

5
大多数电子邮件客户端会自动阻止图像,直到用户批准为止。 - Eran Galperin
1
这就是为什么我说你必须让图像成为有效信息的关键部分。 - Paul Dixon
3
这将取决于接收者将其作为HTML打开。例如,我从不这样做任何电子邮件,如果电子邮件依赖于我打开图像位置,我就无法看到它。因此,实际上这导致接收者无法获取内容。在我看来,这是糟糕的设计。 - Svante

8

传送状态通知是通常的方式:http://www.sendmail.org/~ca/email/dsn.html

除非使用那个微软电子邮件工具并且读者没有禁用已读回执,否则无法确定电子邮件是否已读。

编辑:我还没有进入HTML电子邮件,所以我从未考虑过阅读通知。


1
使用HTML电子邮件作为通知是一种糟糕的hack,而且容易出问题。您不考虑它是正确的。 - Svante

4

没有确切的方法可以知道。即使远程服务器接受了消息,也不能保证它不会被垃圾邮件过滤器或其他方式过滤。


此时,我对了解远程服务器是否接受了消息感兴趣。所以,我很高兴能够知道这是否发生了。 - Marcel

4
所有的追踪链接和webbug都假定人们实际上打开了邮件并启用了远程图像,或者点击了链接。这一切都是有缺陷的。
为了确保接收到电子邮件并且不会被退回,我会执行以下操作:
1. 添加"Errors-To"头(设置为例如bounce@domain.com) 2. 添加"Return-Path"头(设置为例如bounce@domain.com) 3. 捡起邮件箱(bounce@domain.com)并解析邮件
这样可以让您检查何时返回了电子邮件,根据消息内容,您可以确定哪个电子邮件退回/返回。

3

为什么你想知道别人是否阅读了邮件?

从法律角度来看,你无法证明阅读者就是收件人,因此任何你能想到的方法都无法在法庭上成立(比如你想确认某人已经阅读了一份重要文件)。

从安全角度考虑,如果你在邮件中添加奇怪的链接、网络追踪器或图片等内容,那么你的邮件会被任何一个好的垃圾邮件过滤器标记为垃圾邮件并被删除。而且如果你想销售某些东西,这绝对是一个让你失败的死路。

更新:如果你需要确保人们已经阅读了某些内容,我建议你发送带有链接或指向他们应该阅读的文档的邮件。不要在链接中添加网络追踪器或个性化ID。在文档中,告诉他们签署文件并返回签署副本作为证明他们已经阅读了它。


3

很遗憾,没有一种100%的方法可以确定消息是否已传递到用户的收件箱。即使服务器接受了该消息,它也可能被垃圾邮件过滤器卡住或异步地反弹回来。

许多人提到了 Web Bug 跟踪技术。这对于营销人员来说效果很好:他们可以根据样本量进行假设。它们需要 HTML 电子邮件和用户在 HTML 中加载图像。这在某些情况下会自动发生,但很多时候人们必须专门点击“下载图像”按钮。

另一种方法是使用 Goodmail 。他们的服务部分包括跟踪哪些消息实际上被传递并打开。当然,这需要花费资金,并且并非所有邮件提供商都受支持。同样,它主要是一个营销工具。

您还可以在链接中隐藏跟踪脚本。例如,您可以创建一个类似于以下内容的 URL:

http://trackingserver/track/$messageid/http://real.url/goes/here
< p > track 脚本会记录数据库中的“点击”并将客户端重定向到 http://real.url/goes/here。然后,您需要有一个令人信服的理由每次都点击该URL。


2
我猜测以上内容包括:HTML中的图像,如果他们点击某些东西则跟踪链接。有第三方服务,如ReturnPath / Goodmail可以提供帮助。
最好的建议是确保您发送的列表干净,IP地址声誉良好,反向DNS / SPF记录,广告活动中良好的退订和退信处理,内容垃圾邮件检查,并让收件人将您添加到他们的通讯录中。
这将为您提供更好的交付机会...
Sundeep.//

1

试试这个:

使用HTML编写电子邮件(使用PHP并不那么困难)。 在该电子邮件中,包含一张图片(也许只是一个漂亮的标志或其他东西)。 这张图片将是一张特殊的图片...它的src将是,比如说,myserver.com/images/logo.gif?recipient@email.com。这个src需要为每个收到电子邮件的人动态生成。然后,如果收件人打开了邮件,邮件客户端将向您的服务器请求logo.gif?recipient@email.com。

因此,如果您的服务器收到了对该图像的请求,您将知道recipient@email.com已经收到了您的消息。

您可以为URL末尾的标记创建一种特殊格式,以便不仅告诉哪个人,还告诉他们正在回复哪个电子邮件。

请记住,这就是垃圾邮件发送者用来确定电子邮件地址是否活动的方法。因此,某些软件可能会询问用户是否认为您是垃圾邮件!此外,有些用户可能没有图像支持(或已关闭此支持)。

祝你好运!


1

如果是内部的话,发送电子邮件,但不要在电子邮件中放置消息内容。提供一个网站链接,并在URL中放置标识符,以便您可以将页面查看与电子邮件联系起来。

如果对方配合的话,即使是外部的,您仍然可以这样做。

您还可以在目标邮件系统上设置一个普通账户并检查它。如果您在该帐户收到电子邮件,则很可能该系统未设置过滤器。

您还可以要求接收系统的管理员给您发送已成功接收的电子邮件的回复(您知道,脚本会卷曲您的确认网页),但这需要很多合作。尽管在那时,通过Web服务传递消息可能更容易。


0

如果我没记错的话,只要你成功发送了邮件,就可以确信它至少已被接收邮件服务器接受。


你说的“发送成功”是指返回代码吗? - Marcel
这是发送电子邮件时发生的示例。http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#Sample_communications - J.J.

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