PHP / Ruby on Rails SMTP电子邮件验证或检查是否发送邮件

时间:2011-05-30 12:03:55

标签: php ruby-on-rails email smtp validation

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

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

我得到了一些代码http://code.google.com/p/php-smtp-email-validation/,但我怀疑这会阻止/ blaklist我的IP /服务器。

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

我对其他平台如python等开放。

修改

我可以理解,没有确切的方法可以检测邮件是否被删除。但有大约50-90%的可能性是有任何方法可以检查邮件已经在轨道上的红宝石中发送。

2 个答案:

答案 0 :(得分:0)

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

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

如果已为某个域设置了'catch all'地址,那么无论是否有给定地址的电子邮件帐户,都会接受*@example.com,您永远无法验证给定的地址是实际上有效。

因此无法使用SMTP一致地验证电子邮件地址的有效性。您可以验证某些电子邮件地址无效;你永远不能假设缺乏无效意味着有效性。

答案 1 :(得分:0)

这是不可能的。在这个宇宙中现在有绝对的方式 能够知道消息是否已经发送。

某些协议(如X400)会尽力提供发送通知, 不幸的是,总会有失败的情况。

因此,SMTP之类的互联网协议甚至都没有尝试过。他们 尽力使其发挥作用,但不能保证,最重要的是, 他们不保证任何反馈。

发送消息时,涉及很多实体。您, 您的UA,您的MTA,可能是一些中间MTA,收件人MTA, 收件人UA,收件人。好吧,不,不再是这样了。那里 您的收件人有几个邮箱的可能性,以及他 使用网络服务从他的几个盒子收集电子邮件来收集 他们成为一个UA,所以它可能就像:你,你的UA,你的MTA, 可能是一些中间MTA,收件人MTA,收集器UA, 收集器MTA,实际收件人MTA,实际收件人UA, 收件人。在每个权利之间,可能有一些 积极或消极承认的水平。但就是这样。 实体N将知道该消息已被实体N + 1接收 链条,但随后通信关闭,它不知道是什么 在实体N + 1和N + 2之间发生,以及何时发生。如果有的话 运气不好的问题MTA可能会发回错误信息给 发件人,但由于垃圾邮件,这不一定做得太多了 和病毒。

好吧,最终,您的消息可能会到达最终收件人的UA。 在那里,可以做一些事情来被告知它已被收到, 或者甚至可能显示,带有一些非标准化的标题 在消息中。可以轻松配置某些UA以插入这些UA 标题,并尊重或不尊重他们。隐私和垃圾邮件/病毒 用户不会激活此功能(它允许地址收集器 轻松验证电子邮件地址以转发给垃圾邮件发送者),所以 你获得实际答案的概率非常低 (除非你发送电子邮件给dumbasses)。

但即使有这个功能激活并运作良好,事实也是如此 您收到收件人的UA发送的消息告诉您 您的电子邮件已显示无效。值得注意的是,它 并不能证明收件人已经查看了您的邮件 少了他读过它,甚至更少,他已经理解了它!

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

如果您想确保邮件是否已发送,您必须这样做 使用更高级别的协议。例如,如果你问一个问题 您的电子邮件期待答案A1或答案A2,您有四个 可能性:

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

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

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

  • 你迟迟没有得到答案。 你不能假设任何事情。尝试发送另一封电子邮件,引出答案。 如果您仍未收到任何实际通信确认 尝试给收件人打电话。或亲自见面。或打他进去 面子。如果你仍然没有得到任何答案,你可以考虑你的 陷入昏迷或死亡的接收者,并假设该消息未通过。 (有些人认为与某人沟通是值得的 处于昏迷状态,但我认为刺激他们只是好事 大脑,你不能指望答案,他们不会开始回答你的问题 他们醒来时积压的讨论。)