PHP/Rube-on-Rails SMTP电子邮件验证或检查邮件是否送达


PHP / Ruby on Rails SMTP Email Validation or check mail delivered or not

PS:我不是垃圾邮件发送者,我的应用程序也不是。

我有一个数千个电子邮件地址的列表,我想测试它是有效的电子邮件地址还是不使用SMTP。

我有一些代码http://code.google.com/p/php-smtp-email-validation/但我怀疑这是否会阻止/屏蔽我的IP/Server。

我已经查了一长串关于stackoverflow的相关问题。但没有一个能提供适当的解决方案。因为有很多公司提供这种服务。他们是如何管理这些东西的?

我对python等其他平台持开放态度。

编辑

我能理解并没有确切的方法来检测邮件是否被投递。但有50-90%的可能性可以通过任何方式来检查邮件是否已在ruby on rails中送达。

作为SMTP事务的一部分,发送SMTP服务器将发出RCPT命令,指示应将邮件发送到哪个电子邮件地址。

如果已知指定的收件人不是可交付地址,则SMTP服务器此时可以用550代码进行响应。这只适用于接收SMTP服务器,这些服务器处理有限的已知可能收件人列表。

如果为给定的域设置了一个"包罗万象"的地址,使得无论给定地址是否有电子邮件帐户,都会接受*@example.com,则您永远无法验证给定地址是否有效。

因此,无法使用SMTP一致地验证电子邮件地址的有效性。您可以验证某些电子邮件地址是否无效;你永远不能认为没有无效就意味着有效。

这是不可能的。在这个宇宙中,现在绝对有办法能够知道消息是否已传递。

诸如X400之类的一些协议努力给出递送通知,不幸的是,总有失败的时候。

出于这个原因,SMTP等互联网协议甚至都没有尝试。他们尽最大努力让它发挥作用,但不提供任何保证,最重要的是,他们不保证有任何反馈。

在发送消息时,涉及到许多实体。你你的UA,你的MTA,可能是一些中间MTA,收件人MTA,接收方UA,接收方。不,不再是了。那里你的收件人可能有几个邮箱,而他使用网络服务从他的几个邮箱中收集电子邮件它们合并为一个UA,所以可能会像:你,你的UA,你的MTA,可能是某个中间MTA、接收方MTA、收集器UA,收集器MTA、实际接收方MTA、实际收件人UA,收件人。在这些实体之间,可能有一些肯定或否定承认的程度。但仅此而已。实体N将知道该消息已由实体N+1在链,但随后通信被关闭,它不知道是什么在实体N+1和N+2之间以及何时发生。如果有如果运气不好,MTA可能会向发件人,但由于SPAM的原因,这不一定再做太多了和病毒。

最终,您的消息可能会到达最终收件人的UA。在那里可以做一些事情来通知它已经被接收,或者甚至可能显示,通过一些非标准化的标题在消息中。一些UA可以很容易地配置为插入无论是否尊重他们。隐私和SPAM/病毒专家用户不会激活此功能(它允许地址收集器轻松验证电子邮件地址以转售给垃圾邮件发送者),因此你得到实际答案的概率很低(除非你在给笨蛋发电子邮件)。

但即使这个功能被激活并运行良好您收到收件人的UA发送的消息,告诉您你的电子邮件被显示并不能证明什么。值得注意的是并不能证明收件人已经查看了你的邮件更别说他读过,更别说他理解了!

总之,您可以从技术上确定您的消息已发送到链中的第一个实体。仅此而已。从那里上,播放它将被接收、阅读和理解。

如果你想确保邮件是否送达,你必须使用更高级别的协议。例如,如果您在你的电子邮件希望得到A1或A2的答案,你有四个可能性:

  • 你得到的答案是A1。您可以假设邮件已送达并已阅读。但它被理解了吗?A1真的是收件人想要发送的答案吗?

  • 你会得到答案A2。您可以假设邮件已送达并已阅读。但它被理解了吗?A2真的是收件人想要发送的答案吗?

  • 你得到的答案是A3。您可以假设邮件已送达,并且已阅读,但未被理解。

  • 你不会在一段时间内得到答案。你不能想当然。尝试发送另一封电子邮件以获得答案。如果你仍然没有得到任何实际沟通的确认试着给收件人打电话。或者亲自见面。或者打他脸。如果你仍然没有得到任何答案,你可以考虑收件人处于昏迷或死亡状态,并假设邮件没有通过。(有些人认为与某人交流是值得的处于昏迷状态,但我相信只有刺激他们大脑,你不能期待答案,他们不会开始回答你的当他们醒来时积压的讨论)。