Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 警告:mail()要求参数4为字符串_Php - Fatal编程技术网

Php 警告:mail()要求参数4为字符串

Php 警告:mail()要求参数4为字符串,php,Php,我正在尝试使用下面的代码发送邮件,但出现以下错误 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'])); $s

我正在尝试使用下面的代码发送邮件,但出现以下错误
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需要
字符串$to
字符串$subject
字符串$message
字符串$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";
$headers=“MIME版本:1.0\r\n”;
$headers.=“内容类型:文本/普通;字符集=iso-8859-1\r\n”;
$headers.=“发件人:{$name}\r\n”;
$headers.=“回复:\r\n”;
$headers.=“主题:{$Subject}\r\n”;
$headers.=“X-Mailer:PHP/”.phpversion()。“\r\n”;
为什么
\r\n
(来自文档)

应使用CRLF(\r\n)[…]分隔多个额外的标头 如果未收到消息,请尝试仅使用LF(\n)。一些Unix邮件 传输代理(最显著的是»qmail)用CRLF替换LF 自动(如果使用CRLF,则导致CR加倍)。这 应作为最后手段,因为它不符合»RFC 2822


旁注使用
“\r\n”
而不是
'\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=array();
$headers[]=“MIME版本:1.0”;
$headers[]=“内容类型:文本/普通;字符集=iso-8859-1”;
$headers[]=“From:{$name}”;
$headers[]=“回复:”;
$headers[]=“主题:{$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";
$headers=”“;
$headers.=“MIME版本:1.0\r\n”;
$headers.=“内容类型:文本/普通;字符集=iso-8859-1\r\n”;
$headers.=“发件人:{$name}\r\n”;
$headers.=“回复:\r\n”;
$headers.=“主题:{$Subject}\r\n”;
$headers.=“X-Mailer:PHP/”。phpversion()。“\r\n”;

如消息所述,第四个参数(
$additional_headers
)应为字符串。因此,您需要加入数组元素:

$headers = implode("\r\n", $headers);
mail($to, $subject, $message, $headers);
从:

要插入到电子邮件标题末尾的字符串

这通常用于添加额外的标头(从、抄送和密件抄送)。应使用CRLF(\r\n)分隔多个额外的标头。如果使用外部数据组成此标头,则应对数据进行清理,以便不会注入不需要的标头


警告:mail()希望参数4是字符串,数组在第16行的../email.php中给出!读一下。或者至少。我真的很抱歉,我刚开始使用php两天。在某个地方得到了这段代码,并试图让它工作,它最初是在数组中编写的,我认为它应该与数组一起工作,因为它是这样编写的。你说得对,我应该相信手册。为什么投反对票?没有理由否决投票。我的正义之票。@user2094220如果你还没有看到它,你可以在这里参观一下:看看这个网站是如何运作的!(顺便说一句:你可以接受这样的答案:如何帮助你最大,如何解决你的问题!())谢谢你,你的解决方案有效!我已将$headers替换为内爆(PHP_EOL,$headers)@user2094220
PHP_EOL
并不总是设置为
\r\n
。改用
“\r\n”
。@SimoneNigro是的,我看到了,你的答案现在是正确的。该评论是针对OP的。根据@Simone Nigro建议,我已将$headers替换为内爆(PHP_EOL,$headers)。我认为这和你建议的一样,谢谢=)@user2094220最初他建议使用
PHP\u EOL
,这是错误的<应使用代码>“\r\n”
。在他的回答下面也可以看到我的评论。@user2094220
内爆(PHP_EOL,$headers)
这是错误的!!!使用
内爆(“\r\n”,$headers)
。我很抱歉!感谢大家的提醒,我已将其更改为CRLF内爆(“\r\n”,$headers)