4

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

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

到目前为止我做了什么:

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

我真正想要的:

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

我来赏金!

4

3 回答 3

6

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

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

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

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

如果您 [或任何阅读本文的人] 没有自愿收集您的电子邮件列表,至少有一定程度的用户选择加入,那么我们的电子邮件管理员称之为“拉绳子”的高级技术,您可以从高处悬挂一段绳子放置并从其正下方查看它的高度。

于 2013-08-19T23:12:49.537 回答
4

email admins may elect to have all attempt to send an "OK" even if the the address you are sending to does not exist. I do this in part to make it harder for spammers to "learn" the address in my domain.

A better practice would be to require registration via a web form with captcha (of some kind) that then sends a verification email, rather then accepting mass registration via email. (if you are not doing this already).

If you have a sufficient history to build off of, you might want to create a black list of known bad email address to reference prior to sending. How many of your registrants are mailadmin@yourdomain.com or root@google.com?

For my business, we host a SMTP server locally to avoid costs associated with failed delivery on legitimate email campaigns. Otherwise I would be burning money and shoveling sand in to the sea.

于 2013-08-19T23:02:00.317 回答
3

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

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

检查邮件域的MX记录

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

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

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

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

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

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

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

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

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

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

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

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

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

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

于 2013-08-19T23:03:58.883 回答