2010-12-10 79 views
0

我在Maildir和PHP的一個小問題上瘋了。 我需要檢查APACHE_RUN_USERMaildir並解析delivery-status消息。如何從PHP中刪除Maildir中的電子郵件?

閱讀後刪除信息的問題;我注意到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

其開放式的問題,直到今天,但有些評論可能會有所幫助:

爲了從 郵件目錄或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

相關問題