X-Amavis-Alert:错误的标题部分,MIME 错误:错误:无法解析头部;

X-Amavis-Alert:错误的标题部分,MIME 错误:错误:无法解析头部;

我收到此错误:X-Amavis-Alert:BAD HEADER SECTION,MIME 错误:错误:无法解析头部;当向 roundcube webmail 发送带有附加 pdf 的电子邮件时,如果我将相同的邮件发送到 gmail,则没有问题,我的代码是:

$doc=new SimpleXmlElement($raw_response, LIBXML_NOCDATA);
$pdf=$doc->params->param->value->array->data->value->struct->member[0]->value->base64;
//echo   $pdf;
file_put_contents("pacte_actionnaire.pdf", base64_decode($pdf));

$to = '[email protected]';
$subject = 'Test';
$boundary = md5(uniqid(microtime(), TRUE));
$headers = "From: test <[email protected]>\r\nMime-Version: 1.0\r\nContent-Type: multipart/mixed;boundary=".$boundary."\r\n\r\n";
// Message
$msg = 'This is a multipart/mixed message.'."\r\n\r\n";
// Texte
$msg .= '--'.$boundary."\r\n";
$msg .= "Content-type:text/plain;charset=utf-8\r\n Content-transfer-encoding: 7bit\r\n\r\n";
$msg .= 'Un message avec une pièce jointe.'."\r\n";
// Pièce jointe
$file_name = 'pacte_actionnaire.pdf';
$file_type = filetype($file_name);
$file_size = filesize($file_name);

$handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
$content = fread($handle, $file_size);
$content = chunk_split(base64_encode($content));
$f=fclose($handle);
$msg .= '--'.$boundary."\r\n";
$msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
$msg .= 'Content-transfer-encoding:base64'."\r\n";
$msg .= $content."\r\n";
$msg .= '--'.$boundary."\r\n";
mail($to, $subject, $msg, $headers);

因此我从 xmlrpc 响应中收到一个 pdf 文档,然后通过电子邮件发送它,确切的错误消息是:

X-Amavis-Alert: BAD HEADER SECTION, MIME error: error: couldn't parse head;
    error near:;
    JVBERi0xLjQNJeLjz9MNCjcgMCBvYmoNPDwvTGluZWFyaXplZCAxL0wgNjY4MzAvTyA5L0UgNjIx;
    NjkvTiAxL1QgNjY1MzkvSCBbIDQ5NSAxNjZdPj4NZW5kb2JqDSAgICAgICAgICAgICAgICAgICAg;
    DQoyOCAwIG9iag08PC9EZWNvZGVQYXJtczw8L0NvbHVtbnMgNC9Qc[...]

毕竟error near:; 它是 base64 编码的 pdf,所以我认为错误来自 pdf 编码。

答案1

内容前必须有一个空行:

$msg .= '--'.$boundary."\r\n";
$msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
$msg .= 'Content-transfer-encoding:base64'."**\r\n\r\n**";
$msg .= $content."\r\n";
$msg .= '--'.$boundary."\r\n";

相关内容