Zend_Mail_Part: получить количество вложений - PullRequest
0 голосов
/ 01 марта 2012

Как узнать, сколько вложений в сообщении?

Надежен ли этот метод?

$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);

1 Ответ

3 голосов
/ 01 марта 2012

Возможно иметь вложения 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) {}
    }
}
...