【问题标题】:Is there an implementable (non-theoretical) way to prove if email address belong to real email account?是否有一种可实施(非理论)的方法来证明电子邮件地址是否属于真实电子邮件帐户?
【发布时间】:2013-08-21 20:28:20
【问题描述】:

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

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

到目前为止我做了什么:

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

我真正想要的:

一个可靠的检查邮件帐户是否存在可由普通编码人员用 PHP 或 Java 实现。一个 bash one-liner 或一个 php/java 库就可以做到这一点。免费或商业。

我会提供赏金!

【问题讨论】:

  • 出于好奇,这个数字是真的吗?
  • 处理电子邮件发送所需的硬件数量是直接成本还是间接成本?
  • 难道世界上所有的垃圾邮件发送者都想知道这一点!
  • 我是一个电子邮件人,我可以告诉你,你提出的问题没有解决方案。您可以考虑使用“白名单”服务来帮助您的电子邮件到达目的地。
  • 我能想到的唯一方法是使用双重选择方法(回复或点击链接)。但您可能希望在发送消息之前进行检查。

标签: java php bash email


【解决方案1】:

即使您要发送的地址不存在,电子邮件管理员也可以选择让所有人都尝试发送“OK”。我这样做的部分原因是为了让垃圾邮件发送者更难“了解”我域中的地址。

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

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

对于我的企业,我们在本地托管了一个 SMTP 服务器,以避免与合法电子邮件活动的传递失败相关的成本。否则我会烧钱,把沙子铲到海里。

【讨论】:

    【解决方案2】:

    SMTP 协议并非旨在提供一种检查邮箱可用性的方法。

    发送电子邮件时,通常采取以下步骤:

    查看邮件域的MX记录

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

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

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

    已联系接收邮件服务器。如果存在,邮件可能会被递送。 SMTP 协议要求发送邮件服务器发送接收邮件地址、发送邮件地址,然后是邮件本身。

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

    这可能会因多种原因而失败。重要的信息是,此步骤可能发生在发送邮件服务器收到邮件已收到的肯定回复并且连接终止之后。因此,发送邮件服务器可能不知道投递失败。

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

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

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

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

    此外,还有一种像灰名单这样的技术,它可以回答任何尝试以临时故障状态发送邮件的尝试。正常的邮件服务器将在稍后尝试,最终灰名单计时器结束(在某些设置中可能超过一个小时),并进行真正的传递尝试,最终拒绝或接受。同时,邮件服务器希望它包含垃圾邮件过滤器来检测新一波的垃圾邮件,而灰名单实际上只需要一些时间。知名邮件服务器的任何常规投递尝试都会立即成功,因为成功的非垃圾邮件投递会被列入白名单。

    在所有关于真实邮件如何工作的描述之后,我想你可以看到确实没有办法“简单地”检测一个邮件地址是否真的存在。你唯一能做的就是尝试检测它是否存在,如果你确实被告知邮箱不存在,因为目标邮件服务器拒绝投递,你可以假设你可能不再尝试向该目标投递邮件.

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

    您确实应该实施适当的退回管理和投递失败检测,以删除明显失败的邮件地址。其他任何东西都无法检测到。

    【讨论】:

      【解决方案3】:

      这称为“双重选择加入”。

      1. 用户在您的注册表单中输入他们的电子邮件地址。
      2. 用户点击了一个框,上面写着“是的,请给我发电子邮件”。
      3. 您向该用户发送了一封电子邮件,内容是“您好,这是为了确认您的帐户。请点击此链接。”
      4. 单击链接后,您将获得尽可能多的确认信息,并且您成为垃圾邮件发送者或被误认为垃圾邮件发送者的可能性较小。

      其他不浪费付费电子邮件的魔法还有:

      • “使用知道 500 级 SMTP 错误意味着什么的邮件程序”[又名,不是 mail()] 并从您的列表中删除该人。
      • “退回处理”并从您的列表中删除该人。
      • “有效的退订流程”有效,并且还会从您的列表中删除该人。我有没有提到应该工作

      如果您 [或阅读本文的任何人] 没有自愿收集您的电子邮件列表,至少 一定程度 用户选择加入 有一种先进的技术,我们的电子邮件管理员称为“拉绳子”,将一段绳子从高处挂起,然后从它的正下方看它有多高。

      【讨论】:

      • 这对于使用帐户的应用程序可能是一个有用的标准,但对于某些用例,这并不适用。例如,我的一位客户为主流受众提供“观察者通知”。如果人们想引起注意,比如产品价格更新,那么他们可以通过简单地提交他们的电子邮件地址来请求邮件更新。没有登录,没有验证。我并不是说这是一个好的实现,但这在一些领先的欧洲网站中很常见。
      猜你喜欢
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 2021-07-03
      • 2012-10-30
      • 2011-06-08
      相关资源
      最近更新 更多