是否有可实施(非理论)的方式来证明电子邮件地址是否属于真实的电子邮件帐户?

时间:2013-08-19 22:17:32

标签: java php bash email

有没有办法证明某个电子邮件地址是“真实的”,因此属于真正存在的电子邮件帐户?我通过电子邮件获得大量注册,这些电子邮件根据电子邮件模式定义有效,但实际上并不存在。发送到假邮件地址需要花费很多钱,因为我们(和其他人)按邮件付费(向假邮件帐户发送100,000个邮件会使您每年花费四位数,只是为了显示一个数字)。 我想确切地检查那一刻。我们不关心电子邮件地址是否在1分钟后离线。

理想的解决方案是使用bash one-liner(可以用所有主要语言调用)。

到目前为止我做了什么:

  1. 检查this similar 3yo thread,这对于真实案例来说是完全错误的。我想检查是否存在电子邮件地址,在我发送邮件的那一刻(为了防止费用)。
  2. 检查主机名是否可ping。
  3. 检查电子邮件地址是否可以ping通,例如here。我尝试在bash脚本中重建它,但是失败了(获取地址很难!)。
  4. 我真正想要的是什么:

    可靠地检查邮件帐户是否可由普通编码器以PHP或Java实现。一个bash单线程或一个php / java库就是这样做的。免费或商业。

    我会提供赏金!

3 个答案:

答案 0 :(得分:6)

它被称为“双重选择”。

  1. 用户在您的注册表中输入他们的电子邮件地址。
  2. 用户点击一个显示“是的,请给我发电子邮件”的框。
  3. 您向该用户发送了一封电子邮件,其中包含“嗨,这是为了确认您的帐户。请点击此链接。”
  4. 点击链接后,您将获得尽可能多的确认信息,并且您不太可能成为垃圾邮件发送者,或者被误认为是垃圾邮件发送者。
  5. 其他不浪费付费电子邮件的魔法咒语是:

    • “使用知道500级SMTP错误含义的邮件程序”[aka,not mail()]并从列表中删除该人。
    • “退回处理”并从列表中删除该人。
    • “正在运行的取消订阅流程”,但也可以从列表中删除该人员。我是否提到应该工作

    如果您[或任何阅读此内容的人]没有自愿收集您的电子邮件列表,而至少 叫做“扯绳”,你从一个高处挂上一根绳子,看看它下方的绳索有多高。

答案 1 :(得分:4)

即使您发送的地址不存在,

电子邮件管理员也可以选择全部尝试发送“确定”。我这样做的部分原因是让垃圾邮件发送者更难“学习”我域中的地址。

更好的做法是要求通过带有验证码(某种类型)的网络表单进行注册,然后发送验证电子邮件,而不是通过电子邮件接受批量注册。 (如果你还没有这样做的话)。

如果您有足够的历史记录,您可能需要在发送之前创建一个已知错误电子邮件地址的黑名单。您的注册人中有多少是mailadmin@yourdomain.comroot@google.com

对于我的公司,我们在本地托管SMTP服务器,以避免与合法电子邮件广告系列上的递送失败相关的费用。否则我会烧钱并把沙子铲到海里。

答案 2 :(得分:3)

SMTP协议的目的不是提供检查邮箱可用性的方法。

发送电子邮件时,通常会执行以下步骤:

检查邮件域的MX记录

发往somebody@example.com的邮件会检查example.com是否有MX记录。如果有一些,将联系具有最高优先级的人接受邮件。如果没有响应,将联系任何具有较低优先级的现有MX。

如果没有MX记录,将搜索example.com的“A”记录,并且将连接该IP以接受邮件。

连接MX或A记录中提到的服务器

联系接收邮件服务器。如果它存在,邮件可能会交付。 SMTP协议要求发送邮件服务器发送接收邮件地址,发送邮件地址,然后发送邮件本身。

接收邮件服务器尝试将邮件传递到用户邮箱

这可能由于几个原因而失败。重要信息是,在发送邮件服务器得到收到邮件的肯定答复后,此步骤可能会发生,并且连接已终止。因此,发送邮件服务器可能无法确定传递失败。

在这种情况下,接收邮件服务器将发送退回邮件。但是这个退回邮件会被发送到指定接收错误的邮件地址。这可能是原始邮件地址,但也可能是另一个邮箱地址。此外,接收退回的负责邮件服务器不能是发送原始邮件的服务器。

此时应该非常清楚,电子邮件确实是一种异步信息交换媒介,内置几乎没有任何可靠性。

有些技术可以让它变得可行但是希望稍微改进一下:通常发送退回邮件不是最好的主意。配置良好的邮件服务器拒绝接收有任何问题的邮箱的邮件,例如它们不存在或已满。

另一方面,邮件的新大黑洞是垃圾邮件过滤器。通常这些是由用户配置的,邮件服务器将很乐意接收现有邮箱的任何邮件,但垃圾邮件会自动删除或移动到垃圾邮件文件夹并被忽略。

此外,还有一项像灰名单这样的技术可以回复任何传递具有临时故障状态的邮件的尝试。普通邮件服务器将在稍后尝试,并且最终灰名单计时器结束(在某些设置中可能超过一小时),并且进行真正的传递尝试,并且真正的最终拒绝或接受。与此同时,邮件服务器希望它包含垃圾邮件过滤器来检测垃圾邮件的新浪潮,并且灰名单只能购买一段时间。众所周知的邮件服务器的定期传递尝试将立即成功,因为成功的非垃圾邮件传递被列入白名单。

在对真实邮件如何工作的所有描述之后,我认为你可以看到真的没有办法“简单地”检测邮件地址是否确实存在。你唯一可以做的就是检测它是否存在,如果你肯定地告诉你邮箱不存在,因为目标邮件服务器拒绝传递,你可以假设你可能不应该再尝试将邮件传递给该目标

任何其他结果都不会告诉你任何事情。而且你还会注意到,检测邮件地址是否存在需要你发送邮件 - catch-22情况。

您确实应该实施适当的退回管理和传递故障检测,以删除明显的失败邮件地址。其他任何事情都是无法察觉的。