要过滤在收件人电子邮件字段中使用的有效电子邮件,请查看filter_var() https://www.php.net/manual/en/function.filter-var.php:
$email = filter_var($_POST['recipient_email'], FILTER_VALIDATE_EMAIL);
if ($email === FALSE) {
echo 'Invalid email';
exit(1);
}
这将确保您的用户仅提供单一有效的电子邮件,然后您可以将其传递给mail()
功能。据我所知,没有办法使用 PHP 通过消息正文注入标头mail()
函数,因此数据不需要任何特殊处理。
Update:
根据的文档mail() https://www.php.net/manual/en/function.mail.php,当它直接与 SMTP 服务器通信时,您需要防止邮件正文中出现句号:
$body = str_replace("\n.", "\n..", $body);
更新#2:
显然,也可以通过对象注入,但由于没有FILTER_VALIDATE_EMAIL_SUBJECT
,您需要自己进行过滤:
$subject = str_ireplace(array("\r", "\n", '%0A', '%0D'), '', $_POST['subject']);