2012-01-20 8 views
0

私は、指定されたメールにアクセスしてメールを取得するスクリプトを持っています。 $temp->getContent()は、このコンテンツの間に次の..メールのデコードがzendメールで機能しない

----boundary_2710_edfb8b44-71c8-49ff-a8cb-88c83382c4ee 
Content-Type: multipart/alternative; 
boundary=--boundary_2709_dde0dd0e-ba35-4469-949d-5392aec65750 --boundary_2709_dde0dd0e-ba35-4469-949d-5392aec65750 
Content-Type: text/html; charset=utf-8 
Content-Transfer-Encoding: base64 
PGZvcm0gbWV0aG9k.........this part is base64 encoded and it works fine if i copy and decode it separately.......AgICAgICAgICAgDQoNCjwvZm9ybT4= 
----boundary_2709_dde0dd0e-ba35-4469-949d-5392aec65750-- ----boundary_2710_edfb8b44-71c8-49ff-a8cb-88c83382c4ee 
Content-Type: multipart/mixed; boundary=--boundary_2711_eca4cfc3-fc62-43d6-b9fb-e5295abbfbe8 ----boundary_2711_eca4cfc3-fc62-43d6-b9fb-e5295abbfbe8 Content-Type: application/pdf; 
name=redBusTicket.pdf 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment Content-ID: JVBERi0xLjIgCiXi48/TIAoxIDAgb2JqIAo8PCAKL1R5cGUgL0NhdGFsb2cgCi9QYWdlcyAy IDAgUiAKL1BhZ2VNb2RlIC9Vc2VOb25lIAovVmlld2VyUHJlZ 

エコーbase64でエンコードされた部分があり、私はコピーして別にそれをデコードした場合、それが正常に動作します。また、メールに添付ファイルがあります。添付ファイルはどうすれば入手できますか?以下は私のコードです。私は直接BASE64_DECODEを使用するとき、私は何も出力..ちょうど空白のページを取得していない。..

$storage = new Zend_Mail_Storage_Imap($imap); 
$temp = $storage->getMessage($_GET['mailid']); 
echo base64_decode($temp->getContent()); 

ZendのWebサイトのドキュメントは非常に良いではありません。助けが要る!!

+0

はあなたが解析する失敗したしようとしているメッセージの完全な未編集のオリジナル版を提供することはできますか?整形式のMIMEメッセージではないようですが、そうであれば例外が発生するはずです。 – Charles

+0

これは助けになるのですか?:http://stackoverflow.com/questions/834152/why-doesnt-this-mail-message-decode-correctly –

+0

@Charlesその機密情報なので、エンコードされた部分を共有できません。そのデコードされたとき、私は私のGmailに正確に表示されるhtml出力を取得します。 –

答えて

2

私は電子メールからbase_64のコンテンツを取得するために、このようなものがあります。あなたが必要としないものをフィルターにかけてみてください。

if ($email->isMultipart() && $partsCount){ 

    for($i = 1; $i < $email->countParts() +1; $i++) { 
     $part = $email->getPart($i); 
     $headers = $part->getHeaders(); 
     if (
      array_key_exists('content-description', $headers) 
      || array_key_exists('content-disposition', $headers) 

     ){ 
      if (array_key_exists('content-description', $headers)) { 
       $att = $part->getContent(); 
       $filepath = utf8_encode(DATA_PATH . '/' . $part->getHeader('content-description')); 
       if (is_file($filepath)) { 
        unlink($filepath); // deletes previous files with same name 
       } 
       $file = fopen($filepath, "w"); 
       fwrite($file, base64_decode($att)); 
       fclose($file); 
       $attachments[] = $filepath; 
      } 
     } 

    } 
} 
+0

私は仕事を行うために直接getPathを使用しています..しかし、引用符で囲まれた印字可能なエンコーディングです。私はbase64のデコードや引用符で囲まれた印字可能なデコードを使用するために "コンテンツ転送のエンコーディング"タイプを見つけることができません。提案してください.... –

+0

私はあなたを理解しません。ヘッダーにContent-Transfer-Encoding:base64があります。私はあなたのためのヘッダーを編集しました。 –

+0

私は編集を見ませんでした..しかし、getHeaders関数はContent-Transfer-Encodingを返していません。私はgetPartとgetHeadersを持っていなければならないと思います。 –

3

それは私にとって良い作品:

foreach ($mail as $message) { 

    $content = null;  
    foreach (new RecursiveIteratorIterator($message) as $part) { 
     if (strtok($part->contentType, ';') == 'text/plain') { 
      $content = $part; 
      break; 
     } 
    } 

    if ($content) { 
     echo "\n encode: " . $content->contentTransferEncoding;   
     echo "\n date: " . $message->date; 
     echo "\n subject: \n" . iconv_mime_decode($message->subject, 0, 'UTF-8'); 
     echo "\n plain text part: \n" . mb_convert_encoding(base64_decode($content), 'UTF-8', 'KOI8-R'); 
    } 

} 
関連する問題