Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php电子邮件地址验证不起作用?_Php_Email - Fatal编程技术网

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

php电子邮件地址验证不起作用?,php,email,Php,Email,嘿,伙计们, 我知道用PHP发送电子邮件有很多更好的方法。然而,为此目的,最简单的解决方案是完美的。唯一的问题是:我不知道为什么,我的验证不起作用 我得到了电子邮件地址,但是验证不起作用,我可以发送一个完全空的表单。有什么想法吗 <?php //Email $Name = Trim(stripslashes($_POST['author'])); $EmailFrom = Trim(stripslashes($_POST['email'])); $Subject = Trim(strips

嘿,伙计们, 我知道用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";
}

?>

您需要在条件之后返回

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

不要继续发送邮件

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

if (!$validationOK) {
  print "error";
  exit;
}
此代码:

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

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

如果$validationOK为false,您将打印单词error,但此时您不会停止脚本,因此php将继续处理之后的命令

试试下面的方法

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

当有经过尝试和测试的免费软件为您提供验证功能时,不要编写自己的电子邮件验证功能

欢迎您使用我的免费PHP函数
is\u email()
验证地址。可在[此处][1]下载

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


你不应该依赖验证器来告诉你用户的电子邮件地址是否确实存在:一些ISP向用户提供不符合要求的地址,特别是在不使用拉丁字母的国家。更多关于电子邮件验证的文章,请参见:[http://isemail.info/about][2] .

您也可以使用以下功能检查域:checkdnsrr!!无论如何,看看php文档!!