在此PHP 代码来检查使用而不发送一封电子邮件的 SMTP 电子邮件地址.

任何人都已经尝试类似的任何东西或工作为您?您能告诉如果电子邮件客户 / 用户输入是否正确并存在?

2009-02-19 14:20:43
问题评论:

类似的问题︰检查电子邮件地址是否存在使用.net?

只想知道,为什么这有远程登录标记?

没有所的 PHP 库︰ github.com/kickboxio/kickbox-php

Kickbox 并不自由。此 API 是不仅仅是要连接到其服务的包装。

回答:

有两种方法,有时也用来确定是否实际上存在收件人,您可以︰

  1. 您可以连接到服务器,并发出 VRFY 命令。很少的服务器都支持此命令中,但它是为完全这。如果服务器响应与 2.0.0 DSN,用户已存在。

    VRFY 用户

  2. 您可以颁发 RCPT 并查看邮件将被拒绝。

    邮件︰ <>

    RCPT TO: < user@domain >

如果该用户不存在,则将获得 5.1.1 DSN。但是,只是因为电子邮件不会被拒绝,并不意味着用户已存在。某些服务器将以静默方式放弃这样的请求,以防止其用户的枚举。其他服务器无法验证用户,并且必须接受无论消息。

此外,还有名为灰名单,这将导致服务器最初拒绝地址,应为真实的 SMTP 服务器会尝试重新发送一段时间后反垃圾邮件技术。这会把事情搞糟的尝试验证地址。

真诚地,如果您试图验证地址是最好的方法是使用简单的正则表达式来阻止显然无效的地址,然后再发送实际电子邮件的链接返回到您的系统将验证该电子邮件的接收。这还可以确保在用户输入其实际的电子邮件,不发生属于其他人稍有拼写错误。

某些服务器会甚至接受消息,但然后再发送一条错误消息返回到信封发件人,尤其是具有多个内部部门与他们自己的邮件服务器的大型组织。边框服务器可能根本不知道内的所有帐户。

然后为什么不要垃圾邮件制造者使用此方法来验证电子邮件 addies?我的意思是留出很少的服务器,支持这些方法的事实。或做这些?

@Shehi︰ 垃圾邮件发送者可能实际使用这种方法,是难以分辨。但是,因为垃圾邮件发送者可能会用到它,几乎所有的邮件服务器禁用 VRFY,因此实际上 VRFY 可能毫无用处。

您可以为如何使用 RCPT TO 代码示例︰ < user@domain >?谢谢

很好,但它只缺少一些 php 代码

其他答案这里讨论试图执行此操作的各种问题。我认为我将展示如何您可以尝试这在您想要了解自己的情况下。

您可以连接到邮件服务器,通过远程登录来询问电子邮件地址是否存在。下面是一个示例的测试stackoverflow.com的电子邮件地址:

C:>nslookup -q=mx stackoverflow.com
Non-authoritative answer:
stackoverflow.com       MX preference = 40, mail exchanger = STACKOVERFLOW.COM.S9B2.PSMTP.com
stackoverflow.com       MX preference = 10, mail exchanger = STACKOVERFLOW.COM.S9A1.PSMTP.com
stackoverflow.com       MX preference = 20, mail exchanger = STACKOVERFLOW.COM.S9A2.PSMTP.com
stackoverflow.com       MX preference = 30, mail exchanger = STACKOVERFLOW.COM.S9B1.PSMTP.com

C:>telnet STACKOVERFLOW.COM.S9A1.PSMTP.com 25
220 Postini ESMTP 213 y6_35_0c4 ready.  CA Business and Professions Code Section 17538.45 forbids use of this system for unsolicited electronic mail advertisements.

helo hi
250 Postini says hello back

mail from: <me@myhost.com>
250 Ok

rcpt to: <fake@stackoverflow.com>
550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 w41si3198459wfd.71

用数字代码前缀的线是从 SMTP 服务器的响应。我添加了一些空白线条,使其更具可读性。

许多邮件服务器不会返回此信息作为一种手段来防止电子邮件地址搜集垃圾邮件制造者,因此不能依赖此技术。但是,您可能必须在通过检测无效的邮件服务器或收件人地址又清理出一些明显错误的电子邮件地址的一些成功拒绝方法同上。

也请注意,邮件服务器可能黑名单您是否使这些请求太多。


在 PHP 中,我相信您可以使用fsockopenfwritefread以编程方式执行上述步骤︰

$smtp_server = fsockopen("STACKOVERFLOW.COM.S9A1.PSMTP.com", 25, $errno, $errstr, 30);
fwrite($smtp_server, "helo hi
");
fwrite($smtp_server, "mail from: <me@myhost.com>
");
fwrite($smtp_server, "rcpt to: <fake@stackoverflow.com>
");

关闭的帽子 !我发现的一个问题是,执行端口 25 始终适用于低优先级的 mx 记录概览

@DhruvenkumarShah,很抱歉我不知道。如果您发现,请再次发表评论。

大家好,我只努力要找出所有有关的 MX 记录我自己大学帐户,但它不适用于 25.但网站的在线验证 email.org 种未正常工作.他们如何将做它.我将让您了解它是否我了解它

@DhruvenkumarShah 它提供几个邮件交换服务器的名称。请参阅邮件 exchangers 的提示问题答案。因此,如果其中一个出现故障,另从列表应该工作。

真的非常完整给我帮助.谢谢您先生.我尝试在 putty 和运作的魅力.谢谢。

常规的答案是,可以检查电子邮件地址存在事件,如果您向其发送一封电子邮件︰ 只是未能进入黑洞。

虽有描述的方法是十分有效的。ZoneCheck在生产代码中使用,但它使用 RSET 而不是退出。

如果他的邮箱与用户交互不是 overcostly 许多站点实际测试邮件到达某处通过发送大量必须发送回发射器 (无论是转到一个秘密的 URL 或通过电子邮件发送回此机密的数字) 的秘密。大多数的邮寄列表类似的工作。

不是这样的...某些服务器可能会检查"rcpt 给:"

http://www.freesoft.org/CIE/RFC/1123/92.htm

这样做是安全风险......

如果服务器执行操作,可以写入 bot 发现的每个地址在服务器上。.

我已仔细考虑的太:)

一些问题是︰

  1. 我敢肯定有些 SMTP 服务器将告诉您立即如果您给他们一个地址不存在,但一些将不会作为隐私措施。他们将接受任何地址您给他们,会默认忽略这些不存在的那些。
  2. 文章中说,如果您这样做往往与某些服务器,因为它们将黑名单您。
  3. (类似于 gmail) 某些 SMTP 服务器,您需要使用 SSL 来做任何事情。时才如此使用 gmail 的 SMTP 服务器发送电子邮件到。

关于第三个点,这只是如果想要将其用作中继。我不知道的任何需要 SSL 的邮件交换器。这样做任何他们将停止接收来自多个用户的电子邮件。

对不起,我错。如果希望使用 gmail 的 SMTP 服务器发送电子邮件,则必须使用 SSL。

@GraemePerrow-可以您请研究此问题和帮助。stackoverflow.com/q/37651282/4229270

请输入您的翻译

How to check if an email address exists without sending an email?

确认取消