Проблемы с PHP System_Daemon и соединением IMAP - PullRequest
0 голосов
/ 02 июня 2010

Я пытаюсь создать демон PHP, который подключается к серверу IMAP и обрабатывает электронные письма по мере их поступления. У меня он близок к работе, но демон продолжает захватывать исходные электронные письма, которые он находит при первом запуске демона. загружен. Я считаю, что причина в том, что я открываю соединение IMAP в родительском процессе. Пример ниже:

if ($imapConnection=imap_open($authhost,$user,$pass) or die())
{
  //start daemon
  while()
  {
    //Grab email headers 
    $imapHeaders = imap_headers($imapConnection);
    $count = sizeof($imapHeaders)

    //loop the emails
    for($i = 1; $i <= $count, $i++)
    {
      //process the email
      //delete the email
    }

    System_Daemon::iterate(15);
  }
}   
imap_close($imapConnection);

Я бы хотел избежать подключения IMAP в цикле. Как я могу сохранить соединение с сервером IMAP вне цикла и все еще получать новые электронные письма?

1 Ответ

1 голос
/ 02 июня 2010

В IMAP письма остаются на сервере. Таким образом, каждый раз, когда вы приходите, если вы явно не удалили их, старые электронные письма все еще там. Чтобы предотвратить обработку этих электронных писем, у вас может быть переменная, в которой хранится количество сообщений, которые вы обрабатывали ранее, поэтому вы можете перейти от $ i = 0 (предположительно, последнее поступившее) к $ i <$ var, где $ var обозначает число письма уже обработаны. </p>

РЕДАКТИРОВАТЬ:

Поскольку вы удаляете почту с помощью imap_delete, выполняйте imap_expunge в каждом цикле.

РЕДАКТИРОВАТЬ 2:

Используйте imap_reopen, я пытался выполнить скрипт на моем сервере, используя imap_reopen($imapConnection, "{domain.tld}INBOX"); после каждого цикла, и теперь он видит новую почту. Не выполняет новую аутентификацию, просто переместите свой поток.

...