我正在使用以下脚本通过 PHP 发送电子邮件。但是,我收到错误"PHP Warning: mail(): Found numeric header (4) in /home/....public_html/.../sendemail.php on line 16"任何帮助。
PHP脚本
<?php
$name = @trim(stripslashes($_POST['name']));
$from = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$to = 'xxxxx@xmail.com';
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=UTF-8";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
mail($to, $subject, $message, $headers);
die;
Run Code Online (Sandbox Code Playgroud)
如果要将标题作为数组传递,则需要将标题名称指定为数组键!(PHP 文档:“如果传递数组,则其键是标头名称,其值是相应的标头值。”)。
现在有2个解决方案。
解决方案 1(标题为字符串):
$headers = "MIME-Version: 1.0";
$headers .= "Content-type: text/plain; charset=UTF-8";
$headers .= "From: {$name} <{$from}>";
$headers .= "Reply-To: <{$from}>";
$headers .= "Subject: {$subject}";
$headers .= "X-Mailer: PHP/".phpversion();
Run Code Online (Sandbox Code Playgroud)
解决方案 2(标题为数组):
$headers = [
'MIME-Version' => 'MIME-Version: 1.0',
'Content-type' => 'text/plain; charset=UTF-8',
'From' => "{$name} <{$from}>",
'Reply-To' => $from,
'Subject' => $subject,
'X-Mailer' => 'PHP/' . phpversion(),
];
Run Code Online (Sandbox Code Playgroud)
要检查是否mail()有效,您可以检查最后一个错误。
例子:
$success = mail('example@example.com', 'My Subject', $message);
if (!$success) {
$errorMessage = error_get_last()['message'];
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句。为避免由于不符合 RFC 而导致接收电子邮件服务器出现任何问题,您应该使用像 SwiftMailer 或 PHPMailer 这样的邮件程序类。