我收到了电子邮件地址,但验证无效,我可以发送一个完全空的表单。有什么想法吗?
<?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";
}
?>
答案 0 :(得分:1)
你需要在条件
之后返回if (!$validationOK) {
print "error";
// return or exit
}
不要继续发送邮件
答案 1 :(得分:1)
打印“错误”后,您不会结束脚本。您应该结束脚本或进行其他更改,以便在发生错误时不会发送。例如:
if (!$validationOK) {
print "error";
exit;
}
答案 2 :(得分:0)
此代码:
if (!$validationOK) {
print "error";
}
不会阻止您的程序发送邮件,它只会打印错误信息。
答案 3 :(得分:0)
如果$ validationOK为false,则打印单词错误,但是您没有暂停脚本,因此php继续处理后面的命令。
尝试以下
if (!$validationOK) {
print "error";
exit();
}
答案 4 :(得分:0)
当有经过试用和测试的免费软件为您完成时,请不要编写自己的电子邮件验证功能。
欢迎您使用我的免费PHP函数is_email()
来验证地址。可以下载[这里] [1]。
它将确保地址完全符合RFC 5321。它还可以选择检查域是否实际存在并具有MX记录。
您不应该依赖验证器来告诉您用户的电子邮件地址是否确实存在:某些ISP会向其用户提供不合规的地址,尤其是在不使用拉丁字母的国家/地区。更多关于电子邮件验证的文章:[http://isemail.info/about] [2]。