PHP mail()强制单个收件人

时间:2014-08-03 18:45:50

标签: php email

强制mail()仅发送给第一个收件人的最佳方法是什么,即使用户在$email中提供多个收件人...我需要以某种方式过滤用户输入...?

$email = '1@mail.com, 2@mail.com, 3@mail.com...';    
mail( $email, $subject, $body, $extra )  //send to: 1@mail.com

3 个答案:

答案 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.";
}