可能重复:
How to check if an email address exists without sending an email?
可能重复:
我有一个非常大的用户数据库(超过50000),网站发送了大量自动电子邮件。
问题是,数据库中的很多地址(多年前注册的用户)已经过期或已被删除或因任何原因不再存在。
这会产生问题,因为每个用户都应该有一封有效的电子邮件。
我一直试图找出是否有办法检测电子邮件地址是否有效,这样我们就可以更新数据库并提示这些用户输入新的电子邮件?像ping电子邮件地址的东西?
这里有一些代码,我试图找出但无济于事:
有没有人有解决方案?
请注意,我需要一个PHP解决方案,而不是命令行,因为我有50k的电子邮件需要检查。
答案 0 :(得分:2)
首先,您应该通过实施“闭环”电子邮件验证系统来阻止可能无效的电子邮件地址的涌入。基本上,当用户注册您的网站时,您会发送一封电子邮件,其中包含确认其电子邮件地址的链接,一旦他们确认,他们的帐户就可以完全访问您的网站。
其次,没有真正的方法来确定电子邮件地址是否严格使用PHP无效。几个月前我不得不解决这个问题,最后我们使用邮件服务器告诉我们电子邮件地址是否已被退回。当您的邮件服务器发送电子邮件,并且无法发送电子邮件时,收件人邮件服务器将通过退回通知回复您的邮件服务器,其中包含有关电子邮件被退回的原因的信息。传递状态通知(DSN)代码等信息,用于识别无法传递电子邮件地址的原因。
一些示例代码:
这些代码由前缀(4或5)组成,表示瞬态(临时)或永久性故障。以下两位数代码表示误差范围; 10到19之间的两位数字代码表示与电子邮件地址有关的错误,而20到29之间的代码表示与电子邮箱相关的错误。
根据这些代码,您可以根据业务需求确定“硬弹跳”或“软弹跳”。硬弹跳会像511(坏邮箱),确定此电子邮件地址目前无效。软弹跳会像445(网络拥挤),这表明这是一个临时问题,为什么电子邮件无法传递。
因此,在您的实例中,您可以发送电子邮件,然后跟踪邮件服务器上的跳出。通过查看每个退回和相应的DSN代码,您可以标记帐户的电子邮件是否有效(我们使用PHP来访问邮件服务器并解析DSN代码的退回通知)
DSN代码中有更多information。
- 编辑 -
正如Dagon明智地提到的那样,您可以在收到电子邮件后将其反弹到PHP脚本中。为此,您需要阅读mailserver配置,但我们的内容类似于以下内容:
bouncehandler unix - n n - - pipe
user=nobody argv=/usr/bin/php /path/to/BounceHandler.php
<% end %>
答案 1 :(得分:1)
检查电子邮件地址是否过期的唯一方法是向其发送电子邮件,看看是否收到回复。但请注意,这样做可能会被视为垃圾邮件,因为它是一封未经请求的邮件。
您可以检查一个电子邮件地址是否正确形成,以及它指定的邮件服务器是否确实存在,但那是关于它的。我没有办法检查帐户是否存在(如果有人正在阅读那里发送的邮件),而不发送带有链接的邮件并要求用户点击该链接。