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)@user2094220PHP_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)