[英]warning: mail() expects parameter 4 to be string
我正在尝试使用以下代码发送邮件,但得到以下错误不是mail()
接收数组的标头?
Warning: mail() expects parameter 4 to be string, array given in ../email.php on line 16
代码:
<?php
$name = @trim(stripslashes($_POST['name']));
$from = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$to = 'example@gmail.com';
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
mail($to, $subject, $message, $headers);
PHP mail()需要string $to
, string $subject
, string $message
, string $headers
如果你想使用一个数组作为标题
mail($to, $subject, $message, implode("\r\n", $headers));
否则改变你的代码
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$headers .= "From: {$name} <{$from}>\r\n";
$headers .= "Reply-To: <{$from}>\r\n";
$headers .= "Subject: {$subject}\r\n";
$headers .= "X-Mailer: PHP/".phpversion()."\r\n";
为什么\\r\\n
(来自mail()文档)?
应使用CRLF(\\ r \\ n)分隔多个额外标头[...]如果未收到消息,请尝试仅使用LF(\\ n)。 一些Unix邮件传输代理(最明显的是»qmail)自动替换CRLF的LF(如果使用CRLF,则会导致CR加倍)。 这应该是最后的手段,因为它不符合»RFC 2822。
旁注使用"\\r\\n"
而不是'\\r\\n'
正如消息所说,第4个参数( $additional_headers
)应该是一个字符串。 所以你需要加入数组元素:
$headers = implode("\r\n", $headers);
mail($to, $subject, $message, $headers);
从文档 :
要插入电子邮件标题末尾的字符串。
这通常用于添加额外的标题(From,Cc和Bcc)。 应使用CRLF(\\ r \\ n)分隔多个额外标头。 如果使用外部数据来组成此标头,则应对数据进行清理,以便不会注入不需要的标头。
你让$headers
成为一个数组,但它必须是一个字符串! 所以只需改变这些行:
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
为此并将字符串连接在一起:
$headers = "";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$headers .= "From: {$name} <{$from}>\r\n";
$headers .= "Reply-To: <{$from}>\r\n";
$headers .= "Subject: {$subject}\r\n";
$headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.