2012-03-01 21 views
0

メッセージの添付ファイル数はどのくらいですか?Zend_Mail_Part:添付ファイルの数を取得する

この方法は信頼できますか?

$attachments = 0; 
$msg = $mail->getMessage($msgno); 
if($msg->isMultipart()){ 
    $parts = $msg->countParts(); 
    for($i=1; $i<=$parts; $i++){ 
     $part = $msg->getPart($i); 
     try { 
      if(strpos($part->contentType,'text/html')===false && strpos($part->contentType,'text/plain')===false) 
       $attachments++; 
     } catch (Zend_Mail_Exception $e) {} 
    } 
} 

またはこれですか?

$matches = array(); 
$pattern = '`Content-Disposition: (?!inline)(.*)[\s]*filename=`'; 
$attachments = (string) preg_match_all($pattern, $storage->getRawContent($msgno), $matches); 

答えて

3

すべての場合に信頼性がないかもしれませんので、text/htmlまたはtext/plainある添付ファイルを持つことが可能です。たとえば、HTMLファイルなどの添付ファイルがある場合、このような状況が発生する可能性があります。

かわりに、各MIMEパートのcontent-dispositionをチェックしたほうが良いことがあります。

$attachments = 0; 
$msg = $mail->getMessage($msgno); 
if($msg->isMultipart()){ 
    foreach($msg->getParts() as $part) { 
     try { 
      if ($part->disposition == Zend_Mime::DISPOSITION_ATTACHMENT || 
       $part->disposition == Zend_Mime::DISPOSITION_INLINE) 
       $attachments++; 
     } catch (Zend_Mail_Exception $e) {} 
    } 
} 
+1

は、Zend_Mail_Message :: getParts存在しません。私の答えの2番目の方法はどうですか? – AHHP

+1

'Zend_Mail'は' getParts() 'を持つ' Zend_Mime_Message'から直接継承していますので、 'Zend_Mail'はそれを継承します。私はちょうどその方法をテストし、それは働いた。上記の例では、 '$ msg'は' Zend_Mail'オブジェクトでなければなりません。 '$ mail-> getMessage'が何をしているのか分かりませんが、' $ mail'があなたの 'Zend_Mail'オブジェクトであればそれをスキップすることができます。メッセージの元の本体を取得することは、メッセージが大きかったり添付ファイルが大きい場合には最適ではないかもしれません。あなたが上記の方法を働かせるかどうかを見てください。変数に関する情報を私に与えないと、別の文脈で例を投稿できます。 – drew010

+0

私はそれを使用しましたが、例外は '例外 'Zend_Mail_Exception'のようなメッセージで、 '名前の処理や処理が見つかりませんでした'というメッセージです。' $ msg'オブジェクトは 'Zend_Mail_Storage_Imap'のものです。 –

関連する問題