我得到这个错误:X-Amavis-Alert:坏标题部分,MIME错误:错误:无法parsing头; 当发送一个PDF附加到一个roundcube webmail的电子邮件,如果我发送相同的邮件到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:;后error near:; 这是base64编码的pdf,所以我认为错误来自PDF编码。
内容前必须有一个空行:
$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";