首页 > 解决方案 > 我是否做到不接受输入的@gmail、@hotmail、@yahoo 电子邮件?

问题描述

我使用我网站上的电子邮件按钮进行了订阅。如何限制使用@gmail、@yahoo 电子邮件订阅的人?

列出电子邮件地址

$recipient = "test@test.com";

# SUBJECT (Subscribe/Remove)
$subject = "Subscribe";

# RESULT PAGE
$location = "https://test.com";

## FORM VALUES ##

# SENDER - WE ALSO USE THE RECIPIENT AS SENDER IN THIS SAMPLE
# DON'T INCLUDE UNFILTERED USER INPUT IN THE MAIL HEADER!
$sender = $recipient;
$email = $_POST[‘emailTextBox’];
if (!strpos($email, '@') || !strpos($email, '.')) {
      echo "Email is invalid";
} else {

}


# MAIL BODY
$body .= "Email: ".$_REQUEST['Email']." \n";
# add more fields here if required

## SEND MESSGAE ##

mail( $recipient, $subject, $body, "From: $sender" ) or die ("Mail could not be sent.");

## SHOW RESULT PAGE ##

header( "Location: $location" );
?>

标签: javaphp

解决方案


// ...
$email = $_POST[‘emailTextBox’];

if (!filter_var($email, FILTER_VALIDATE_EMAIL) || preg_match('/\@(gmail|yahoo|hotmail)/', $email)) {
      // Email is invalid
} else {
    // Email is valid
}
  • filter_var,与FILTER_VALIDATE_EMAIL过滤器一起使用,只会检查电子邮件是否实际上是有效的电子邮件
  • preg_match现在将检查电子邮件是否包含您不想要的域。

如果您希望人们仅使用指定的电子邮件订阅,您需要执行以下操作:

// ...
$email = $_POST[‘emailTextBox’];

if (!filter_var($email, FILTER_VALIDATE_EMAIL) || !preg_match('/\@(gmail|yahoo|hotmail)/', $email)) {
      // Email is invalid
} else {
    // Email is valid
}

注意!preg_match()


使用filter_var,您可能还想考虑这个问题及其答案。


推荐阅读