I could not receive a failure notice when sending email to an email address that does not exist ($to_address), using this code:
$subject = "Email subject"; $message = "line1\r\nline2\r\nline3"; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; $headers .= "To: <$to_email>\r\n"; $headers .= "From: Me <$my_email_address>\r\n"; $headers .= "Return-Path: <$my_return_email_address>r\n"; mail($to_email, $subject, $message, $headers);
The problem was that the email address I wanted to receive the failure notices to ($my_return_email_address) was not the same as the value of the configuration option sendmail_from in the php.ini file (Apache web server installed on a machine with the Windows Professional operating system). So the failure notices were sent to the sendmail_from email address if this was an existing address, instead of the email address specified in the Return-path header of the email.
The solution is replacing the lines:
$headers .= "Return-Path: <$my_return_email_address>r\n"; mail($to_email, $subject, $message, $headers);
with:
// when the PHP server runs on Windows ini_set(sendmail_from, $my_return_email_address); mail($to_email, $subject, $message, $headers); ini_restore(sendmail_from);
// when the PHP server runs on UNIX mail($to_email, addslashes($subject), $message, $headers, "-r $my_return_email_address");
This means that, before sending the email, we set the value of the sendmail_from configuration option to $my_return_email_address and we restore the default value of the configuration option after the email is sent.