Получить почту до определенной даты из 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();
Другие вопросы по тегам