强制mail()仅发送给第一个收件人的最佳方法是什么,即使用户在$email
中提供多个收件人...我需要以某种方式过滤用户输入...?
$email = '1@mail.com, 2@mail.com, 3@mail.com...';
mail( $email, $subject, $body, $extra ) //send to: 1@mail.com
答案 0 :(得分:0)
您可以用逗号分解字符串,只在mail()中抛出结果数组的第一个元素。
$email = '1@mail.com, 2@mail.com, 3@mail.com...';
$recips = explode(",", $email);
if(filter_var(trim($recips[0]), FILTER_VALIDATE_EMAIL) !== false) {
mail(trim($recips[0]), $subject, $body, $extra ) //send to: 1@mail.com
} else {
die("no valid email");
}
答案 1 :(得分:0)
你可以写:
$emails = explode(',',$email);
现在$emails[0]
是您可以在mail()
功能中使用的第一封电子邮件。
答案 2 :(得分:0)
想象一下,用户不会使用逗号分隔地址。然后这不起作用,只是trim()
地址也不会阻止您向mail()
发送多封电子邮件。
您将以某种方式还需要检查地址以防止语法错误,例如。使用filter_var()
:
$emails = explode(',', $email);
$email = filter_var(trim($emails[0]), FILTER_VALIDATE_EMAIL);
if ($email === false) {
exit();
}
也可以使用正则表达式进行更复杂的检查:
$regex = "/^[a-zA-Z\d][\w\.-]*[a-zA-Z\d]@[a-zA-Z\d][\w\.-]*\.[a-zA-Z]{2,}$/i";
$emailString = '1@mail.com, 2@mail.com, 3@mail.com...';
$emailArray = explode(',', $emailString);
$isValdid = preg_match($regex, $emails[0]);
if ($isValid === 0) { // 1 for match, 0 for mismatch, false for error
echo "please supply a valid adress.";
}