繁体   English   中英

警告:mail()期望参数4是字符串

[英]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 $tostring $subjectstring $messagestring $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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM