2012-03-01 2 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, например, вы могли бы иметь такую ​​ситуацию.

Вы можете быть лучше проверять 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 не существует. Как насчет второго метода в моем ответе? – AHHP

+1

'Zend_Mail' распространяется непосредственно из' Zend_Mime_Message', который имеет 'getParts()', поэтому 'Zend_Mail' наследует его. Я просто протестировал этот метод, и он сработал. В приведенном выше примере '$ msg' должен быть объектом Zend_Mail. Я не уверен, что делает '$ mail-> getMessage', но, возможно, вы можете пропустить это, если' $ mail' - ваш объект Zend_Mail. Получение необработанного тела сообщения может быть не лучшей идеей, если сообщение велико или имеет большие вложения. Посмотрите, можете ли вы заставить этот метод работать. Если не дать мне больше информации о переменных, или я могу опубликовать пример в другом контексте. – drew010

+0

Я использовал его, и исключение приходит как это 'exception 'Zend_Mail_Exception' с сообщением 'no Header with Name disposition or disposition found' 'также мой объект $ msg' из' Zend_Mail_Storage_Imap', так что я должен делать? –

Смежные вопросы