Я использую встроенные в PHP функции IMAP для создания простого клиента веб-почты (в основном будет использоваться для доступа к учетным записям gmail). В настоящее время я столкнулся с дорожным блоком в представлениях списка почтовых ящиков, где я показываю разбитый на страницы список сообщений в этом почтовом ящике, отсортированный по дате (по возрастанию или по убыванию).
Моя первоначальная реализация извлекла ВСЕ сообщения из почтового ящика с помощью imap_headers () и отсортировала этот массив на основе даты, а затем вернула сегмент массива, который соответствует текущей странице списка, которую пользователь хотел просмотреть. Это работало нормально для почтовых ящиков с небольшим количеством сообщений, но производительность значительно снизилась с ростом размера почтового ящика (для почтового ящика с ~ 600 сообщениями время выполнения составляло в среднем около 10 секунд). А для некоторых пользователей этого клиента 600 сообщений - это небольшое число для почтового ящика, а некоторые из них могут легко содержать от 5 до 10 тысяч сообщений в папке «Входящие».
Таким образом, моя вторая проблема в том, что вместо того, чтобы извлекать заголовки для всех сообщений в почтовом ящике, я получил общее количество сообщений с помощью imap_num_msg () и, используя это число, я создал цикл for, где счетчик цикла используется в качестве номера сообщения. и для каждой итерации я вызываю imap_headerinfo () с этим номером сообщения.
Это работает лучше, однако у меня сложилось впечатление, что номер сообщения напрямую соответствовал моменту получения этого сообщения, поэтому сообщение нет. 1 было самым старым сообщением, а число, возвращаемое imap_num_msg (), было номером самого нового сообщения. Таким образом, используя это, я все еще мог обеспечить сортировку по дате в моем разбитом на страницы списке. Но после тестирования кажется, что номер сообщения не соответствует полученной дате, и на самом деле я понятия не имею, как они назначены.
Любая помощь или направление будет принята с благодарностью.