代码之家  ›  专栏  ›  技术社区  ›  matt

PHP电子邮件地址验证不起作用?

  •  0
  • matt  · 技术社区  · 14 年前

    嘿,伙计们, 我知道用PHP发送电子邮件有很多更好的方法。然而,为此目的,最简单的解决方案是完美的。唯一的问题是:我不知道为什么,我的验证不起作用!

    我得到了电子邮件地址,但是验证不起作用,我可以发送一个完全空的表单。有什么想法吗?

    <?php
    //Email
    $Name = Trim(stripslashes($_POST['author']));
    $EmailFrom = Trim(stripslashes($_POST['email']));
    $Subject = Trim(stripslashes($_POST['subject']));
    $Comment = Trim(stripslashes($_POST['comment']));
    $EmailTo = "myemail@address.com";
    
    /*$Name = "Some Name";
    $EmailFrom = "test@test.com";
    $Subject = "Test";
    $Comment = "Why is the validation not working, don't get it?";
    $EmailTo = "myemail@address.com";*/
    
    
    /*echo $Name . " length: " . strlen($Name) . "<br/>";
    echo $EmailFrom . " length: " . strlen($EmailFrom) . "<br/>";
    echo $Subject . " length: " . strlen($Subject) . "<br/>";
    echo $Comment . " length: " . strlen($Comment) . "<br/>";
    echo $EmailTo . " length: " . strlen($EmailTo) . "<br/>";*/
    
    
    //***************************
    //Validation
    //***************************
    $validationOK=true;
    if ($Name == "") $validationOK=false;
    if (isValidEmail($EmailFrom) == 0) $validationOK=false;
    if ($Subject == "") $validationOK=false;
    if ($Comment == "") $validationOK=false;
    function isValidEmail( $email = null ) {
        return preg_match( "/^[\d\w\/+!=#|$?%{^&}*`'~-][\d\w\/\.+!=#|$?%{^&}*`'~-]*@[A-Z0-9][A-Z0-9.-]{1,61}[A-Z0-9]\.[A-Z]{2,6}$/ix", $email );
    }
    
    if (!$validationOK) {
      print "error";
    }
    
    //***************************
    //Order
    //***************************
    $Body = "Contactform";
    $Body .= "\n\n";
    $Body .= $Comment;
    
    // Email Headers with UTF-8 encoding
    $email_header = "From: " . $EmailFrom . "\r\n";
    $email_header .= "Content-Type: text/plain; charset=UTF-8\r\n";
    $email_header .= "Reply-To: " . $EmailFrom . " \r\n";
    // send email 
    $success = mail($EmailTo, $Subject, $Body, $email_header);
    
    //***************************
    //Success or Error
    //***************************
    if ($success){
      print "success";
    }
    else{
      print "error";
    }
    
    ?>
    
    5 回复  |  直到 14 年前
        1
  •  0
  •   acqu13sce    14 年前

    如果$validationok为false,您将打印“错误”一词,但此时不会停止脚本,因此PHP将继续处理后面的命令。

    尝试以下操作

    if (!$validationOK) {
      print "error";
      exit();
    }
    
        2
  •  1
  •   Haim Evgi    14 年前

    你需要在情况发生后返回

    if (!$validationOK) {
      print "error";
      // return or exit
    }
    

    不要继续发送邮件

        3
  •  1
  •   Emil Vikström    14 年前

    打印“错误”后不结束脚本。您应该结束脚本或进行其他更改,这样就不会在出错时发送该脚本。例如:

    if (!$validationOK) {
      print "error";
      exit;
    }
    
        4
  •  0
  •   Kel    14 年前

    此代码:

    if (!$validationOK) {
      print "error";
    }
    

    不阻止程序发送邮件,它只打印错误消息。

        5
  •  0
  •   Dominic Sayers    14 年前

    当有试用和测试过的免费软件为您做这件事时,不要编写自己的电子邮件验证功能。

    欢迎使用我的免费PHP函数 is_email() 验证地址。可以下载[此处][1]。

    它将确保地址完全符合RFC5321。它还可以选择检查域是否实际存在以及是否有MX记录。

    您不应该依靠验证器来告诉您用户的电子邮件地址是否真的存在:一些ISP向用户提供不符合要求的地址,特别是在不使用拉丁字母的国家。在我的文章中关于电子邮件验证的更多信息,请访问此处:【http://isemail.info/about】【2】。