Получить почту до определенной даты из IMAP, используя Zend
Я использую библиотеку Zend_Mail_Storage_Imap для получения электронной почты из IMAP.
$mail = new Zend_Mail_Storage_Imap(array('connection details'));
foreach($mail as $message)
{
if($message->date > $myDesiredDate)
{
//do stuff
}else{
continue;
}
Этот код извлекает все письма с самым старым письмом, полученным первым. Переменная $myDesiredDate - это дата / время, сообщения за пределами которых не нужны. Есть ли способ пропустить поиск всех писем и проверить дату каждого письма по одному? Если нет, могу ли я перевернуть объект $mail, чтобы получить последнее письмо вверху?
ОБНОВЛЕНИЕ: теперь я немного изменил код, чтобы начать с последней почты и проверять дату и время текущей почты. В тот момент, когда я сталкиваюсь с электронным письмом со временем, по истечении которого я не хочу разбирать электронные письма, я прекращаю цикл.
//time upto which I want to fetch emails (in seconds from current time)
$time = 3600;
$mail = new Zend_Mail_Storage_Imap(array('connection details'));
//get total number of messages
$total = $mail->countMessages()
//loop through the mails, starting from the latest mail
while($total>0)
{
$mailTime = strtotime(substr($mail->getMessage($total)->date,0,strlen($mail->getMessage($total)->date)-6));
//check if the email was received before the time limit
if($mailTime < (time()-$time))
break;
else
//do my thing
$total--;
}
//close mail connection
$mail->close();
Единственное, что меня здесь беспокоит, это то, получу ли я почту в правильном порядке или нет, если я начну с количества писем до 0?
1 ответ
Так как мой код работает абсолютно нормально, я включу это как ответ (быстрый и грязный). Теперь я начинаю с последней почты и проверяю дату и время текущей почты. В тот момент, когда я сталкиваюсь с электронным письмом со временем, по истечении которого я не хочу разбирать электронные письма, я прекращаю цикл.
//time upto which I want to fetch emails (in seconds from current time)
$time = 3600;
$mail = new Zend_Mail_Storage_Imap(array('connection details'));
//get total number of messages
$total = $mail->countMessages()
//loop through the mails, starting from the latest mail
while($total>0)
{
$mailTime = strtotime(substr($mail->getMessage($total)->date,0,strlen($mail->getMessage($total)->date)-6));
//check if the email was received before the time limit
if($mailTime < (time()-$time))
break;
else
//do my thing
$total--;
}
//close mail connection
$mail->close();