PHP邮件 - 找到多个或格式错误的换行符

时间:2015-06-19 16:30:37

标签: php email mime-types email-headers

我们升级了我们的PHP版本,现在收到错误"警告:mail():在additional_header"。

中找到多个或格式错误的换行符

我已经尝试了不同的事情,但是没有任何工作可做。我道歉,因为我不太熟悉所有这些是如何工作的,所以请耐心等待。

目标(在早期版本中有效)是发送基于HTML的消息(has,
标签等),其中包含我们服务器上存在的PDF附件。

如果你能给我一些具体的调整,我会非常感激!

$sFrom = "[Company Name] <[Our Email]>";
$sReplyTo = "[Our Email]";
$sParams = "-f [Our Email]";
$attachment = chunk_split(base64_encode(file_get_contents($sPath)));
$uid = md5(uniqid(time()));

$sHeaders = "From: ".$sFrom."\n".
            "Reply-To: ".$sReplyTo."\n".
            "MIME-Version: 1.0\n".
            "Content-Type: multipart/mixed; boundary=\"".$uid."\"\n\n".
            "This is a multi-part message in MIME format.\n".
            "--".$uid."\n".
            "Content-Type: text/html; charset='iso-8859-1'\n".
            "Content-Transfer-Encoding: 7bit\n\n".
            $sMessage."\n\n".
            "--".$uid."\n".
            "Content-Type: application/pdf; name=\"".$sFileName."\"\n".
            "Content-Transfer-Encoding: base64\n".
            "Content-Disposition: attachment; filename=\"".$sFileName."\"\n\n".
            $attachment."\n\n".
            "--".$uid."--";    
if (!mail($sTo, $sSubject, "", $sHeaders, $sParams)) {
    $bError = true;
}

5 个答案:

答案 0 :(得分:0)

因为https://bugs.php.net/bug.php?id=68776不再允许多次换行(或者目前?)。尝试切换到PEAR Mailer,PHPMailer或其他东西。

使用mail()发送包含附件的php邮件需要多个换行符"\n\n"

答案 1 :(得分:0)

尝试使用\\\n代替\n

答案 2 :(得分:0)

1)尝试附加到未初始化的变量 $ sMessage 时会出错。还要检查其他变量是否具有预期内容($ sTo,$ sSubject)。

2) 您将邮件内容从标题移动到邮件中,但忘记将其添加到邮件功能中 if(!mail($ sTo,$ sSubject,&#34;&#34;,$ sHeaders,$ sParams)) 会变成 if(!mail($ sTo,$ sSubject, $ sMessage ,$ sHeaders,$ sParams))

3)在&#34; multipart / mixed&#34;

之后,您仍然有多个换行符

4)删除lineof&#34;这是MIME格式的多部分消息&#34; 在这里,我更新了您的代码:

$sFrom = "me@aju.ro";
$sReplyTo = "me@aju.ro";
$sParams = "-f me@aju.ro";
$attachment = chunk_split(base64_encode(file_get_contents($sPath)));
$uid = md5(uniqid(time()));

$sHeaders = "From: ".$sFrom."\n".
            "Reply-To: ".$sReplyTo."\n".
            "MIME-Version: 1.0\n".
            "Content-Type: multipart/mixed; boundary=\"".$uid."\"\n".
            "--".$uid."\n".
            "Content-Type: text/html; charset='iso-8859-1'\n".
            "Content-Transfer-Encoding: 7bit\n\n".
$sMessage="\n\n".
            "--".$uid."\n".
            "Content-Type: application/pdf; name=\"".$sFileName."\"\n".
            "Content-Transfer-Encoding: base64\n".
            "Content-Disposition: attachment; filename=\"".$sFileName."\"\n\n".
            $attachment."\n\n".
            "--".$uid."--";    
if (!mail($sReplyTo, $sSubject, $sMessage, $sHeaders, $sParams)) {
    $bError = true;
}

答案 3 :(得分:0)

这是php up渐变更改.PHP mail()函数中的安全风险已得到修复,不再允许使用额外的换行符。

请删除additional_headers参数中的多个换行符。这些计为&#34;多个或格式错误的换行符&#34;:\ r \ r \ n,\ r \ n \ 0,\ r \ n \ r \ n,\ n \ n,\ n \ n。

答案 4 :(得分:0)

在SMTP标准https://tools.ietf.org/html/rfc2045#section-2.1中,换行符定义为\r\n