To filter valid emails for use in the recipient email field, take a look at filter_var()
:
$email = filter_var($_POST['recipient_email'], FILTER_VALIDATE_EMAIL);
if ($email === FALSE) {
echo 'Invalid email';
exit(1);
}
This will make sure your users only supply singular, valid emails, which you can then pass to the mail()
function. As far as I know, there's no way to inject headers through the message body using the PHP mail()
function, so that data shouldn't need any special processing.
Update:
According to the documentation for mail()
, when it's talking directly to an SMTP server, you will need to prevent full stops in the message body:
$body = str_replace("
.", "
..", $body);
Update #2:
Apparently, it's also possible to inject via the subject, as well, but since there is no FILTER_VALIDATE_EMAIL_SUBJECT
, you'll need to do the filtering yourself:
$subject = str_ireplace(array("
", "
", '%0A', '%0D'), '', $_POST['subject']);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…