如何使用PHP检查电子邮件地址是真实还是有效

tel*_*per 47 php email bouncedemail email-verification

是否可以检查是否存在类似于本网站的电子邮件?

http://verify-email.org/

<?php
    if($_POST['email'] != ''){
        // The email to validate
        $email = $_POST['email'];

        // An optional sender
        function domain_exists($email, $record = 'MX'){
            list($user, $domain) = explode('@', $email);
            return checkdnsrr($domain, $record);
        }
        if(domain_exists($email)) {
            echo('This MX records exists; I will accept this email as valid.');
        }
        else {
            echo('No MX record exists;  Invalid email.');
        }
    }
?>
<form method="POST">
    <input type="text" name="email">
    <input type="submit" value="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

这就是我现在所拥有的.它会检查域是否存在,但无法检查该域上是否存在用户的电子邮件.是否可以使用PHP来做到这一点?

Moh*_*deh 41

你应该检查SMTP.

这意味着您必须连接到该电子邮件的SMTP服务器.

连接到SMTP服务器后,您应该发送以下命令:

HELO somehostname.com
MAIL FROM: <no-reply@gmail.com>
RCPT TO: <emailtovalidate@domain.com>
Run Code Online (Sandbox Code Playgroud)

如果您收到"<emailtovalidate@domain.com>拒绝接力",则表示此电子邮件无效.

有一个简单的PHP类.你可以用它:

http://www.phpclasses.org/package/6650-PHP-Check-if-an-e-mail-is-valid-using-SMTP.html

  • 我尝试了这个课程,每个有效的电子邮件都回复"有效,但不存在!" (4认同)
  • 这在技术上是正确的,但实际上是不可取的:ISP(尤其是Yahoo和Hotmail)知道这一点,如果你这么做的话,他们会阻止你的交付(甚至是存在的地址).简而言之,不要这样做. (4认同)
  • 这个脚本很棒,但是,当我在 Outlook、Live 和 Hotmail 服务器上测试它时,响应代码 554 出现在现有的电子邮件上,然后脚本挂起直到超时 (3认同)
  • 提到的课程就像一个魅力! (2认同)
  • 如果mx服务器不允许超过25的纯SMTP但需要固定的SSL连接怎么办? (2认同)

Mac*_*ity 35

如果没有向该帐户发送电子邮件,您无法验证电子邮件是否确实存在.但你可以验证它至少格式化为一个

if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    //Email is valid
}
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以添加另一个检查.解析域,然后运行checkdnsrr

if(checkdnsrr($domain)) {
     // Domain at least has an MX record, necessary to receive email
}
Run Code Online (Sandbox Code Playgroud)

由于人们不断低估这一点,如果您受到约束并决定验证电子邮件,请注意以下注意事项:

  1. 垃圾邮件发送者也会做连接技巧,所以不要假设所有服务器都会以相同的方式响应.另一个答案链接到这个有这个警告的

    某些邮件服务器将默默拒绝测试邮件,以防止垃圾邮件发送者检查其用户的电子邮件并过滤有效的电子邮件,因此此功能可能无法与所有邮件服务器一起正常工作.

    因此,如果地址无效,您可能无法获得无效的地址响应.最热门的答案没有提到这一点.

  2. 垃圾邮件列表.是的,你可以尝试这样做被列入黑名单(记得我说垃圾邮件发送者也知道这些技巧).他们按IP地址列入黑名单,如果您的服务器不断进行验证连接,则可能会在Spamhaus或其他阻止列表中清盘.如果您被列入黑名单,那么验证电子邮件地址有什么用呢?

  3. 如果验证电子邮件地址非常重要,则接受的方法是强制用户回复电子邮件.向他们发送完整的电子邮件,其中包含他们必须单击以进行验证的链接.这不是垃圾邮件,你仍然可以验证它是否有效.

  • 这不检查电子邮件是否存在..它就像正则表达式验证 (3认同)
  • 他并不建议检查电子邮件是否存在,只是它的格式是有效的. (3认同)
  • 正如我在回答中所说,没有万无一失的检查是否存在电子邮件。如果您尝试向其发送电子邮件,并且如果您开始向服务器发送垃圾测试请求,它可能会将您列入黑名单(即 Spamhaus 等),并非每个服务器都会告诉您帐户无效 (2认同)
  • @BarışKURT而且,如果sss.com乐于接受两者,并在不告诉您的情况下仅丢弃一个不存在的东西,该怎么办?坚持认为以某种方式存在一种神奇的方法来确定所有电子邮件中都存在该电子邮件,这使我不断感到惊讶。一些服务器会告诉您它是否存在,但是**许多不会** (2认同)