我在Maildir和PHP的一個小問題上瘋了。 我需要檢查APACHE_RUN_USER
的Maildir並解析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;
}
如何手動將其取出?一些解決方法?
感謝。
謝謝,我解決了Zend_Mail_Storage_Writable_Maildir類取代。 – 2010-12-10 13:24:47