检测过期的电子邮件地址? [复制]

Posted

技术标签:

【中文标题】检测过期的电子邮件地址? [复制]【英文标题】:Detect expired e-mail addresses? [duplicate] 【发布时间】:2012-02-14 13:13:37 【问题描述】:

可能重复:How to check if an email address exists without sending an email?

可能重复:

How to check if an email exists without sending an email?

我有一个非常大的用户数据库(超过 50000 个),并且网站发送了很多自动电子邮件。

问题是,数据库中的很多地址(用户多年前注册的)已过期或已被删除或因任何原因不再存在。

这会产生一个问题,因为每个用户都应该有一个有效的电子邮件。

我一直在尝试找出是否有办法检测电子邮件地址是否处于活动状态,以便我们可以更新数据库并提示这些用户输入新的电子邮件?类似于 ping 电子邮件地址?

这里有一些代码,我试图弄清楚但无济于事:

http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/smtpvalidateclassphp/

有人有解决办法吗?

请注意,我需要一个 PHP 解决方案,而不是命令行,因为我有 50k 电子邮件要检查。

【问题讨论】:

大多数邮件列表会检查退回邮件并进行相应处理。 ping 电子邮件 = 发送电子邮件,看看您是否收到任何退回邮件。 仅供参考,在性能方面,命令行脚本和 PHP 脚本的功能确实没有太大区别。这两种情况的瓶颈都是网络。 【参考方案1】:

有两件事,首先您应该通过实施“闭环”电子邮件验证系统来阻止可能无效的电子邮件地址涌入。基本上,当用户注册您的网站时,您会发送一封电子邮件,其中包含确认他们的电子邮件地址的链接,当他们确认后,他们的帐户就可以完全访问您的网站。

其次,没有真正的方法可以严格使用 PHP 来确定电子邮件地址是否无效。几个月前我不得不解决这个问题,我们最终使用邮件服务器告诉我们一个电子邮件地址是否被退回。当您的邮件服务器发送了一封电子邮件,而该电子邮件无法送达时,收件人邮件服务器将向您的邮件服务器发送退回通知,其中包含有关电子邮件被退回原因的信息。识别电子邮件地址无法送达原因的送达状态通知 (DSN) 代码等信息。

一些示例代码:

511:邮箱错误 512:系统错误 516:邮箱已移动

这些代码由前缀(4 或 5)组成,表示暂时(临时)或永久故障。以下两位代码表示错误范围; 10 到 19 之间的两位代码表示与电子邮件地址相关的错误,而 20 到 29 之间的代码表示与电子邮件邮箱相关的错误。

从这些代码中,您可以根据业务需求确定“硬退回”或“软退回”。硬退回类似于 511(坏邮箱),可以确定此电子邮件地址当前无效。软退回类似于 445(网络拥塞),这表明这是一个临时问题,无法传递电子邮件。

因此,在您的实例中,您可以发送电子邮件群发,然后在您的邮件服务器上跟踪退回邮件。通过查看每个退回邮件和相应的 DSN 代码,您可以标记帐户的电子邮件是否有效(我们使用 PHP 来访问邮件服务器并解析 DSN 代码的退回通知)

这里有更多关于 DSN 代码的information。

-- 编辑--

正如 Dagon 明智地提到的那样,您可以在收到退回的电子邮件后将其通过管道传输到 PHP 脚本中。为此,您需要阅读您的邮件服务器配置,但我们的配置类似于以下内容:

bouncehandler   unix    -       n       n       -       -       pipe
user=nobody argv=/usr/bin/php /path/to/BounceHandler.php
<% end %>

【讨论】:

我们通过管道将返回的电子邮件发送到 php 脚本,比使用 php 访问邮件服务器更容易。 @Dragon - 你能告诉我你是怎么做到的吗? @martinstoeckli:使用示例配置 sn-p 更新帖子以将退回的电子邮件传送到 PHP 脚本中。 @Mike Purcell - 非常感谢,我会记住的。目前我正在使用共享主机,但也许在未来的某个时候......【参考方案2】:

检查电子邮件地址是否过期的唯一方法是向其发送电子邮件消息,看看您是否收到回复。但请注意,这样做可能会被视为垃圾邮件,因为它是不请自来的消息。

您可以检查电子邮件地址是否格式正确,以及它指定的邮件服务器是否确实存在,但仅此而已。如果不发送带有链接的邮件并要求用户单击链接,我就无法检查该帐户是否存在(以及是否有人正在阅读那里发送的邮件)。

【讨论】:

以上是关于检测过期的电子邮件地址? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

由于 msnbot,发送给 Outlook 用户的电子邮件验证链接过期

通过powershell 脚本通知公共邮箱账户快要过期和已经过期邮件通知

检测键盘捣碎的电子邮件地址

在 javascript 中检测错误输入的电子邮件地址

python:数据清理 - 检测欺诈电子邮件地址的模式

JS中验证检测用户输入的电子邮件是不是含有@