Я схожу с ума с небольшой проблемой с 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;
}
Как его удалить вручную? Некоторые обходные пути?
Спасибо.
Спасибо, я решил заменить с классом Zend_Mail_Storage_Writable_Maildir , – 2010-12-10 13:24:47