2010-12-10 3 views
0

Я схожу с ума с небольшой проблемой с Maildir и PHP. Мне нужно проверить 's Maildir и разобрать delivery-status сообщений.Как удалить сообщение электронной почты в Maildir из PHP?

Ошибка удаления сообщения после чтения; я заметил, что Zend_Mail_Storage_Maildir->removeMessage() по-прежнему остается заглушкой.

try { 
    $mailbox = new Zend_Mail_Storage_Maildir(array('dirname' => '/home/' . $_ENV['APACHE_RUN_USER'] . '/Maildir/')); 

    foreach ($mailbox as $id => $message) { 

     // seen flag 
     if ($message->hasFlag(Zend_Mail_Storage::FLAG_SEEN)) { continue; } 

     //get the unique id 
     $uniqueid = $mailbox->getUniqueId($id); 

     //obtain message headers 
     $headers = $message->getHeaders(); 

     //check if the original message was sent from this app and is a delivery-status 
     $result = strpos($message, $id_header); 
     if($result === false) { echo '1 mail skipped: ' . $uniqueid . '. <br />'; continue; } 

     $result = strpos($headers['content-type'], 'delivery-status'); 
     //if no skip to the next mail 
     if($result === false) { echo '1 mail skipped: ' . $uniqueid . '. <br />'; continue; } 

     // if everything it's ok process it. 

     // clear results 
     $data = array(); 
     // foreach line of message 
     foreach(preg_split('/(\r?\n)/', $message) as $line){ 
      //clear results 
      $matches = array(); 

      //perform matches on textlines 
      if(preg_match('/^(.+)\:\s{0,1}(.+)$/', $line, $matches)) { 
       //grab intrested headers 
       foreach(array('Action', 'Status', 'Remote-MTA', 'Diagnostic-Code', $id_header) as $header) { 
        if($matches[1] == $header) $data[$header] = $matches[2]; 
       } 
      } 
     } 

     // *** I NEED TO DROP THE MESSAGE HERE *** 

      // not working code *** 
     $currentmessageid = $mailbox->getNumberByUniqueId($uniqueid); 
     $mailbox->removeMessage($currentmessageid); 

     // *** I NEED TO DROP THE MESSAGE HERE *** 


    // print out results 
     echo '<pre class="email">'; 
     print_r($data); 
     echo '</pre>'; 
    } 

} catch (Exception $e) { 
    echo $e; 
} 

Как его удалить вручную? Некоторые обходные пути?

Спасибо.

ответ

1

В порядке tawfekov ответ я решил следующим образом:

почтовый ящик Открытие:

$mailbox = new Zend_Mail_Storage_Writable_Maildir(array('dirname' => '/home/' . $_ENV['APACHE_RUN_USER'] . '/Maildir/')); 

Обработка кода почта:

1

Извините, но пока не реализовано!

выписка проблема трекер http://framework.zend.com/issues/browse/ZF-9574

его открытым вопрос до сегодняшнего дня, но некоторые комментарии могут быть полезны:

Чтобы удалить электронную почту от MailDir или MBox хранения в один необходимо использовать: Zend_Mail_Storage_Writable_Maildir или Zend_Mail_Storage_Writable_Mbox

Имеются исторические причины для этого , и они должны быть адресованы d стандартизован. На данный момент должны использоваться классы выше или исключение с сообщением, которое немного вводит в заблуждение.

Для получения более подробной информации, пожалуйста, обращайтесь к: http://framework.zend.com/issues/browse/ZF-9574 .

+0

Спасибо, я решил заменить с классом Zend_Mail_Storage_Writable_Maildir , – 2010-12-10 13:24:47