Что такое код imap_fetch_overview

Есть ли ошибка в PHP imap_fetch_overview() — функция при чтении заголовков с помощью скобок?

Я отправляю E-Mail на PHP, используя следующий код:

Затем я пытаюсь прочитать электронную почту, используя imap_fetch_overview() в следующем коде:

Я получаю следующую ошибку:

И $overview->from не имеет значения.

Когда «From:» -part не содержит скобок, проблем нет. Должен ли я также кодировать скобки? Как? Я думал, что mb_encode_mimeheader() выполняет эту работу.

Результатом var_dump($overview) является:

Проблема ist, что

который не является тем, что вы хотите.

Я нашел эту функцию на php.net, которая может вам помочь:

Поле FROM, которое оно не добавлено, потому что у вас нет from=»john@doe.com» active (check ; ) в php.ini ), а ваш mb_encode_mimeheader он не конвертируется, как вы хотите, и для правильной отправки электронной почты.

Для электронной почты с символами UTF-8 и имени вы должны закодировать с помощью UTF-8 и base64_encode .

Вот правильный способ отправки этого электронного письма:

Вы должны получить электронное письмо с соответствующим именем, электронной почтой и темой. Вам все равно придется декодировать те, у которых iconv_mime_decode($overview->from,0, «UTF-8»)

PHP фильтр imap_search X-приоритетный заголовок

В настоящее время я пишу скрипт для перемещения писем из одной папки в другую. Все письма, содержащие заголовок X-Priority: 3 должны быть перемещены.

Часть источника почты:

Код, который я использую:

Теперь мне нужно отфильтровать все электронные письма, для которых установлен заголовок X-Priority . Сначала я подумал, что могу проверить imap_fetch_overview , imap_fetchtext или imap_fetchbody но ни один из них не содержит X-Priority . Однако X-Priority не является допустимым критерием imap_search .

Как я могу отфильтровать почтовый ящик и получать только письма с заголовком X-Priority ?

1 ответ

Хорошо, я должен был выглядеть лучше перед публикацией, но я все равно опубликую свои выводы:

Я узнал, что могу получить заголовки с imap_fetchheader , который также содержит заголовок X-Priority (duh . )

Таким образом, код для его получения будет:

В случае фильтрации я мог бы использовать TEXT качестве критерия для фильтрации электронных писем с определенным X-Priority , например:

Это, кажется, получает все электронные письма, содержащие только заголовок X-Priority .

Получить атрибуты — imap_fetchbody () код

Как получить вложения в электронном письме?

возвращенные вложения даже не имеют правильного размера файла, а возвращенные данные выглядят примерно так

Идентичные файлы имеют одинаковый размер, даже если они являются копиями

Я думаю, что вы усложняете ваш код.

Ваша проблема в том, что вы не получили свои данные кодирования

прежде чем вы сможете получить свои реальные данные в этом файле, пожалуйста, посмотрите на

так что вы можете попробовать распечатать это:

Примечание: $ section — это часть ваших файлов.

Что такое код imap_fetch_overview

166 просмотра

1 ответ

894 Репутация автора

В настоящее время я пишу скрипт для перемещения писем из одной папки в другую. Все письма, содержащие X-Priority: 3 заголовок, должны быть перемещены.

Часть источника почты:

Код, который я использую:

Теперь мне нужно отфильтровать все письма, для которых установлен X-Priority заголовок. Я сначала подумал , я мог бы , возможно , проверить imap_fetch_overview , imap_fetchtext или , imap_fetchbody но ни один не содержат X-Priority . Тем не менее, X-Priority это не является действительным imap_search критерием.

Как я могу отфильтровать почтовый ящик и получить только письма с X-Priority заголовком?

Ответы (1)

плюса

894 Репутация автора

Хорошо, я должен был выглядеть лучше перед публикацией, но я все равно опубликую свои выводы:

Я узнал, что могу получить заголовки imap_fetchheader , которые также содержат X-Priority заголовок (дух . )

Таким образом, код для его получения будет:

В случае фильтрации, я мог бы использовать в TEXT качестве критерия для фильтрации электронных писем с определенным X-Priority , как это:

Это, кажется, получить все письма, содержащие X-Priority только заголовок.

Imap_fetch_overview and newest / oldest mail

I am struggling with sequence for imap_fetch_overview. Is the mail 1 the oldest or newest mail? If a new mail arrives does it get a higher id or not?

1 Answer 1

For the second part of the question,

Each mail will have different ID but there is no higher or lower. It is just rendomly selected but unique.

For the first part of your question,

If you want to find oldest or newest mail, you have to use date method like:

then compare this mails using returned dates.

imap_fetch_overview не работает с другими, чем входящий почтовыми ящиками

Почему функция imap_fetch_overview работает на моем почтовом ящике по умолчанию, но если папка задана — как показано ниже?

Я ищу альтернативу, которая производит заголовок в том же формате, . и я не знаю, почему он не работает!

Мне нужно, чтобы иметь возможность вернуть последний п электронной почты в каждой папке, их предмет / от / до / udate / message_id / UID и флагов

Кажется, ничего не работает . Я пытался просматривал imap_search, imap_fetchheader и т.д., но я не могу найти разумный путь!

АйТи бубен

Инструменты пользователя

Инструменты сайта

Содержание

Команды IMAP

Протокол IMAP (Internet Mail Access Protocol) описывается в RFC 2060.

В отличии от POP3, который просто скачивает входящие письма и сохраняет их локально, с IMAP вы работаете с почтой непосредственно на сервере

Как и POP3, протокол IMAP использует концепцию клиент-сервер с набором команд. С помощью команд осуществляется передача сообщений электронной почты от сервера клиенту. Клиент устанавливает для этой цели TCP-соединение с портом 143 на сервере. Далее сервер должен ответить специальным сообщением-приглашением.

В строке 1 показана команда на открытие сеанса с помощью telnet с портом 143 (порт IMAP по умолчанию). Строка 5 отображает приглашение, выданное сервером IMAP. В строке 6 клиентом задана команда закончить сеанс с сервером. Затем сервер посылает сообщение об окончании сеанса (строка 7) и закрывает соединение с клиентом.

Каждая команда, выдаваемая клиентом, предваряется уникальным идентификатором. Сервер может затем использовать этот идентификатор в своих ответах, что позволяет клиенту определить, к какой команде относится ответ сервера. Это особенно важно при выполнении сервером нескольких команд за сеанс. Идентификатор обычно представляет собой короткую строку алфавитно-цифровых символов, которая генерируется клиентом. Так, в строке 6 листинга 7.1 клиентом был выбран идентификатор a001. Если бы клиенту потребовалось задавать и другие команды, то следующим идентификатором был бы a002 и т.д. Часто для упрощения идентификаторы команд в течение сеанса IMAP просто последовательно увеличивают один из своих разрядов.

После установления соединения клиент находится в состоянии ожидания проверки подлинности, так как для выполнения каких-либо операций со своим почтовым ящиком на сервере он должен идентифицировать себя. После идентификации на сервере клиент может использовать команды IMAP для управления сообщениями на сервере. Протоколом IMAP предусмотрена возможность поддержки пользователем нескольких почтовых ящиков на одном сервере. При этом клиент может читать, отправлять и удалять сообщения в любом из принадлежащих ему почтовых ящиков.

Методы проверки подлинности пользователя в IMAP

Так же как и в протоколе POP3, в IMAP имеется несколько методов проверки подлинности клиента. Некоторые из них обеспечивают больший уровень безопасности, по сравнению с другими. В отличие от клиентов POP3, клиенты IMAP часто проводят довольно длительные сеансы с сервером при обработке сообщений. Таким образом, идентификатор пользователя и пароль не передаются по сети несколько раз в час, как это обычно происходит при работе по протоколу POP3.

Команда LOGIN

Команда LOGIN позволяет клиенту при регистрации на сервере IMAP использовать идентификатор пользователя и пароль в обычном текстовом виде.

Команда AUTHENTICATE

С помощью команды AUTHENTICATE клиент может использовать при регистрации на сервере IMAP альтернативные методы проверки подлинности. Индивидуальная проверка подлинности пользователей не является обязательной и поддерживается не всеми серверами IMAP. К тому же реализации такой проверки могут различаться в зависимости от сервера. Когда клиент выдает команду AUTHENTICATE, сервер отвечает на нее строкой вызова в кодировке base64. Далее в обязанности клиента входит ответ на вызов сервера о проверке подлинности, также закодированный base64. Если на сервере не поддерживается метод проверки подлинности, предложенный клиентом, он включает в свой ответ отрицательное слово NO. После этого клиент должен продолжить переговоры по согласованию метода проверки подлинности. Если все попытки определить метод проверки подлинности потерпели неудачу, то клиент предпринимает попытку зарегистрироваться на сервере посредством команды LOGIN. Пример сеанса с применением AUTHENTICATE:

Илон Маск рекомендует:  Бегущая строка, работает после клика мышкой в input

В строках 6–9 показаны попытки клиента согласовать с сервером IMAP метод проверки подлинности. Как видите, все они не увенчались успехом. А в строке 10 показано, что метод проверки, приемлемый и для клиента, и для сервера, найден. Отвечая, сервер в строке 11 выдает кодированную строку с вызовом в кодировке base64. Однако в строке 12 клиент отвергает попытку регистрации и возобновляет ее лишь в строке 14 с помощью команды LOGIN.

Клиентская часть протокола IMAP

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

Почтовый ящик для клиента по умолчанию носит название INBOX. Все новые сообщения ложатся именно в INBOX. Клиент имеет возможность создавать новые почтовые ящики (иногда называемые в программах-клиентах для работы с электронной почтой папками). Туда с целью упорядочения он может перемещать сообщения из папки INBOX.

Каждому сообщению назначается уникальный идентификатор (UID), по которому они идентифицируются в почтовом ящике. Метка UID сохраняется в течение всех сеансов IMAP для того, чтобы клиентское программное обеспечение могло правильно идентифицировать сообщения в почтовом ящике. Каждому почтовому ящику соответствует уникальный идентификатор достоверности (UIDVALIDITY). Метка UIDVALIDITY должна присутствовать во время всех сеансов IMAP, только в том случае, если идентификаторы сообщений в ящике оставались неизменными. Если в почтовом ящике имеются сообщения с различными идентификаторами, то значение UIDVALIDITY при следующем сеансе должно увеличиться. Это позволяет клиентам быстро определять, появились ли в почтовом ящике новые сообщения с момента последнего к нему обращения.

Каждое сообщение снабжается флагом, который отображает его статус. Флаг может быть постоянным или задаваться на время сеанса. Постоянные флаги могут изменяться клиентом и сохраняться вне зависимости от сеансов. Флаги, назначаемые на время сеанса, действительны только на время текущего сеанса IMAP. В табл. 7.1 представлены варианты флагов почтовых сообщений.

Флаги почтового сообщения IMAP

Почтовому сообщению может соответствовать 0 флагов или несколько флагов. Информация о флагах передается клиенту вместе с самим сообщением. В обязанности клиента входит интерпретация флагов соответствующим образом.

В следующем разделе описываются команды IMAP, которые клиент может задавать серверу.

Сервер должен отвечать соответствующим образом на заданные команды или отвечать отрицательно, если команда задана неправильно либо не поддерживается.

Команда SELECT

Команда SELECT используется, лишь когда почтовый ящик активен. По умолчанию, пока клиент не зарегистрирован в системе, ни один из принадлежащих ему почтовых ящиков не является выбранным. Далее клиент должен выбрать почтовый ящик, с которым он собирается работать. Обычно первый ящик, который выбирается клиентом, — это ящик INBOX, куда помещаются новые сообщения. Формат команды SELECT следующий:

Здесь mailbox — это название почтового ящика, к которому обращается клиент. Во время одного сеанса IMAP может быть активен только один почтовый ящик. Если ящик существует и у клиента имеется соответствующий доступ к нему, то сервер дает многострочный ответ, где описывается состояние почтового ящика.

Команда CREATE

Команда CREATE используется для создания нового почтового ящика на сервере IMAP. Имя и местоположение новых почтовых ящиков определяются в соответствии с общими спецификациями ОС Linux. В рабочем каталоге пользователя создается новый почтовый ящик с именем, но без задания местоположения, так как оно известно каталогу $HOME клиента. Например, если рабочий каталог клиента находится в /home/riley и клиент задает команду CREATE для создания нового почтового ящика stuff/junk, то вновь созданный ящик на почтовом сервере под управлением ОС Linux будет иметь путь /home/riley/stuff/junk. В этом примере вы видите, как используется знак разделителя /. Однако это не является общим для всех серверов IMAP.

Команда DELETE

Команда DELETE применяется к почтовым ящикам, а не к сообщениям. Сервер IMAP при получении этой команды попытается удалить почтовый ящик с именем, указанным в качестве аргумента команды. В аргументе команды можно использовать стандартное описание путей ОС Linux, со знаком разделителя /, если только они не находятся в каталоге $HOME. Сообщения из удаленных почтовых ящиков восстановлению не подлежат и теряются вместе с ящиками.

Команда RENAME

С помощью команды RENAME клиент может изменить имя почтового ящика. При этом возможно применение двух параметров. Первый параметр — собственно имя почтового ящика, который требуется переименовать. И второй параметр — новое имя почтового ящика.

Команда LIST

Команда LIST используется для получения списка всех почтовых ящиков клиента. С ней используются два параметра. Формат команды LIST приведен ниже:

Здесь reference — каталог, где находятся почтовые ящики. Если задается пустая строка вместо этого параметра («»), то почтовые ящики находятся в рабочем каталоге пользователя $HOME. Второй параметр mailbox является именем почтового ящика, который нужно просмотреть. Здесь допускается использование специальных символов, так же, как и при получении обычного списка каталогов, например группового символа (*). Если именем почтового ящика задана пустая строка («»), то сервер будет возвращать в качестве ответа иерархический разделитель (для Linux /) и имя корневого параметра.

Команда LSUB

Команда LSUB используется для устранения проблемы, которая описана для команды LIST. В отличие от команды LIST, с помощью которой отображается все содержимое рабочего каталога пользователя, с помощью команды LSUB отображаются лишь активизированные ранее описанной командой SUBSCRIBE почтовые ящики клиента. Параметры команды LSUB точно такие же, что и для команды LIST, т.е. ссылка (reference) и имя почтового ящика. Подобно команде LIST, параметр ссылки указывает путь к каталогу, в котором находятся почтовые ящики с соответствующими именами (каталог $HOME, если указано «»). Соответственно, под именем почтового ящика понимается имя ящика или имена ящиков, которые требуется вывести в списке (допускается групповой символ (*).

Почтовые ящики могут затем добавляться в список активных ящиков с помощью команды SUBSCRIBE, а удаляться из списка с помощью команды UNSUBSCRIBE. С помощью этих команд можно реализовать на базе клиента IMAP чтение групп новостей. При этом каждая группа новостей реализована как отдельный почтовый ящик на сервере, на которую затем можно подписаться. Сегодня большинство программ для работы с электронной почтой включают функцию чтения групп новостей, так что выполнение этих операций в IMAP не требуется.

Команда APPEND

APPEND — еще одна команда из семейства команд IMAP. Как правило, протокол IMAP применяется исключительно для чтения сообщений из почтовых ящиков. С помощью команды APPEND появляется возможность посылать сообщения в почтовый ящик, добавляя сообщение к концу файла почтового ящика. Эта функция работает не совсем корректно и она является довольно опасной, поэтому не рекомендуем увлекаться ею в качестве альтернативы SMTP. Это, скорее, приятное излишество протокола IMAP, а не рабочая лошадка. Основной формат команды APPEND следующий:

Команда CHECK

Команда CHECK используется для установки контрольной точки в почтовом ящике. Любые операции, такие, например, как запись данных из памяти сервера на его жесткий диск, должны выполняться при соответствующем состоянии почтового ящика. Именно для проверки целостности почтового ящика после дисковых и других подобных им операций и применяется команда CHECK. Эта команда используется без параметров.

Команда CLOSE

Команда CLOSE полностью соответствует своему названию — она закрывает почтовый ящик.

Действие команды CLOSE четко прослеживается на только что открытом новом почтовом ящике. Открытый почтовый ящик закрывается также с помощью команды LOGOUT. Команда CLOSE не имеет параметров.

Илон Маск рекомендует:  Как создать сайт в режиме онлайн Конструкторы сайтов!

Команда EXPUNGE

Ответ сервера на команду EXPUNGE представляет собой отчет о новом состоянии почтового ящика.

В строке 8 пользователь alex выбирает почтовый ящик с именем newbox. Строки 9–16 представляют собой ответ сервера с информацией относительно выбранного почтового ящика. Строка 9 говорит о том, что в нем находится 6 сообщений. В строках 17 и 20 пользователь alex воспользовался командой STORE, чтобы пометить два сообщения как удаленные (\DELETED). Затем в строке 23 пользователь alex выдает команду STATUS. Из строки 24 можно сделать заключение, что, с точки зрения сервера IMAP, в почтовом ящике все еще находятся шесть сообщений, хотя два из них помечены как удаленные. В строке 26 пользователь выдает команду EXPUNGE, по которой сообщения, помеченные как удаленные, стираются. Ответ сервера в строках 27–31 подтверждает, что сообщения были удалены из ящика и в нем осталось четыре сообщения. Это же подтверждает и команда STATUS, заданная в строке 32. На нее сервер отвечает, что в почтовом ящике теперь только четыре сообщения.

Команда SEARCH является одним из наиболее мощных средств из арсенала IMAP. С помощью этой команды производится поиск сообщений по критериям в активном почтовом ящике с последующим отображением результатов в виде номера сообщения. Формат команды SEARCH следующий:

Здесь CHARSET specification состоит из служебного слова CHARSET, за которым следует обозначение набора символов. Набор символов по умолчанию — ASCII , так что, как правило, этот параметр опускается. Параметр search criteria определяет ключевые критерии поиска и их значения. Критерии поиска описаны в табл. 7.3.

Таблица. Критерии поиска для команды SEARCH

Как видно из таблицы существует огромное количество критериев поиска сообщений. Это очень удобно, когда требуется найти специфическое сообщение в почтовых ящиках, которые заполнены большим количеством сообщений. Ниже представлен короткий пример с использованием команды SEARCH.

В строках 17, 20 и 23 показаны примеры использования команды SEARCH. Строки 18, 21 и 24 являются ответами сервера IMAP на команду SEARCH. В ответе содержатся номера сообщений, которые соответствуют критерию поиска. Если соответствий не найдено, то сервер возвращает слово SEARCH без идентификатора сообщения UID.

Команда FETCH

Команда FETCH используется для получения текста почтового сообщения. Она применяется только для отображения сообщений. В отличие от POP3, клиент IMAP не сохраняет копию сообщения на клиентском ПК.

Команда STORE

Команда STORE применяется для изменения информации о сообщении. Формат команды следующий:

Аргумент задает диапазон номеров сообщений, к которым применяется команда STORE. В настоящее время для этой команды определено только два типа данных ( ). Тип FLAGS определяет набор флагов, установленных для сообщения. Тип FLAGS.SILENT также определяет набор флагов, установленных для сообщения, но при этом сервер IMAP не возвращает их новое значение в своем ответе.

Поведением этих типов данных можно управлять, задав перед ними знак плюс (+) или минус (-). Знак плюс означает, что значение типа данных ( ) будет добавлено к сообщению, минус — что оно будет удалено из сообщения.

В строке 18 этого листинга показано, как устанавливается флаг \DELETED для сообщения в активном почтовом ящике с номером 1. Обратите внимание, что перед флагом задан знак плюс (+). Можно было бы также задать флаг (-). Тогда флаг \DELETED был бы отменен для сообщения (один из способов восстановить удаленное сообщение до того, как вступят в силу контрольные точки сообщения).

Команда COPY

Команда COPY используется для копирования сообщений из одного почтового ящика в другой. Формат команды COPY приведен ниже:

Здесь задает диапазон номеров сообщений, которые нужно скопировать из активного почтового ящика, а указывает имя ящика, в который их нужно скопировать.

Для протокола IMAP не определена команда перемещения сообщений, но очевидно, что эта операция есть не что иное, как копирование сообщений в другой почтовый ящик с заданием для оригиналов сообщений флага \DELETED. После следующей ротации почтового ящика (расстановки контрольных точек) оригиналы сообщений будут удалены, и останутся только их копии.

Команда CAPABILITY

С помощью команды CAPABILITY клиент может запрашивать у сервера IMAP информацию о его возможностях.

Команда NOOP

Действия команды NOOP, как мы знаем, соответствует ее названию, т.е. она ничего не делает. Она может применяться для поддержки активности во время сеанса для того, чтобы сеанс не прекратился по таймеру интервала ожидания. Ответ сервера на команду NOOP всегда должен быть положительным. Так как сервер часто в ответе возвращает состояние выполнения той или иной команды, то NOOP вполне можно использовать как триггер для периодического запроса о состоянии сервера. Если что-то произошло с почтовым ящиком во время периода ожидания, например сервер удалил сообщения согласно правилам, установленным для почтового ящика администратором почтовой системы, то в ответ на команду NOOP будет возвращена обновленная информация о его состоянии.

Команда LOGOUT

Команда LOGOUT используется для завершения сеанса для текущего идентификатора пользователя и закрытия всех открытых почтовых ящиков. Если какие-либо сообщения были помечены флагом \DELETED, то с помощью этой команды они будут физически удалены из почтового ящика.

imap_fetch_overview

(PHP 4, PHP 5, PHP 7)

imap_fetch_overview — Read an overview of the information in the headers of the given message

Description

This function fetches mail headers for the given sequence and returns an overview of their contents.

Parameters

An IMAP stream returned by imap_open() .

A message sequence description. You can enumerate desired messages with the X,Y syntax, or retrieve all messages within an interval with the X:Y syntax

sequence will contain a sequence of message indices or UIDs, if this parameter is set to FT_UID .

Return Values

Returns an array of objects describing one message header each. The object will only define a property if it exists. The possible properties are:

  • subject — the messages subject
  • from — who sent it
  • to — recipient
  • date — when was it sent
  • message_id — Message-ID
  • references — is a reference to this message id
  • in_reply_to — is a reply to this message id
  • size — size in bytes
  • uid — UID the message has in the mailbox
  • msgno — message sequence number in the mailbox
  • recent — this message is flagged as recent
  • flagged — this message is flagged
  • answered — this message is flagged as answered
  • deleted — this message is flagged for deletion
  • seen — this message is flagged as already read
  • draft — this message is flagged as being a draft

Examples

Example #1 imap_fetch_overview() example

= imap_open ( «INBOX» , «username» , «password» )
or die( «can’t connect: » . imap_last_error ());

$MC = imap_check ( $mbox );

// Fetch an overview for all messages in INBOX
$result = imap_fetch_overview ( $mbox , «1: < $MC ->Nmsgs > » , 0 );
foreach ( $result as $overview ) <
echo «# < $overview ->msgno > ( < $overview ->date > ) — From: < $overview ->from >
< $overview ->subject > \n» ;
>
imap_close ( $mbox );
?>

See Also

User Contributed Notes

About the sequence sorting again.
I’ve found that there’s a significant speed improvement by preparing the sequence and then fetch them at once with large mailboxes. On small mailboxes wyou will not notice a speed difference.

But then there’s the sorting problem. I’ve spent all night fiuring out how to do this myself. I found the solution!

Prepare an array of messages with imap_sort. Create a second array that maps the message numbers to the actuall place in the fetched array.
You know it will be in numeric order so you can make an array map with the sort() function sorting it from high to low.
Then you can proces the array fetched with imap_fetch_overview with the array_map and you will have them sorted. If you need an example look in the Group-Office code classes/imap.class.inc in a version later then 2.04.

Here is a function to get messages from IMAP and sort them for pagination.

/**
* Return array of IMAP messages for pagination
*
* @param int $page page number to get
* @param int $per_page number of results per page
* @param array $sort array(‘subject’, ‘asc’) etc
*
* @return mixed array containing imap_fetch_overview, pages, and total rows if successful, false if an error occurred
* @author Raja K
*/
public function listMessages ( $page = 1 , $per_page = 25 , $sort = null ) <
$limit = ( $per_page * $page );
$start = ( $limit — $per_page ) + 1 ;
$start = ( $start 1 ) ? 1 : $start ;
$limit = (( $limit — $start ) != ( $per_page — 1 )) ? ( $start + ( $per_page — 1 )) : $limit ;
$info = imap_check ( $this -> _imap_stream );
$limit = ( $info -> Nmsgs $limit ) ? $info -> Nmsgs : $limit ;

Илон Маск рекомендует:  Что такое код asp set

if( true === is_array ( $sort )) <
$sorting = array(
‘direction’ => array( ‘asc’ => 0 ,
‘desc’ => 1 ),

‘by’ => array( ‘date’ => SORTDATE ,
‘arrival’ => SORTARRIVAL ,
‘from’ => SORTFROM ,
‘subject’ => SORTSUBJECT ,
‘size’ => SORTSIZE ));
$by = ( true === is_int ( $by = $sorting [ ‘by’ ][ $sort [ 0 ]]))
? $by
: $sorting [ ‘by’ ][ ‘date’ ];
$direction = ( true === is_int ( $direction = $sorting [ ‘direction’ ][ $sort [ 1 ]]))
? $direction
: $sorting [ ‘direction’ ][ ‘desc’ ];

$sorted = imap_sort ( $this -> _imap_stream , $by , $direction );

$msgs = array_chunk ( $sorted , $per_page );
$msgs = $msgs [ $page — 1 ];
>
else
$msgs = range ( $start , $limit ); //just to keep it consistent

$result = imap_fetch_overview ( $this -> _imap_stream , implode ( $msgs , ‘,’ ), 0 );
if( false === is_array ( $result )) return false ;

//sorting!
if( true === is_array ( $sorted )) <
$tmp_result = array();
foreach( $result as $r )
$tmp_result [ $r -> msgno ] = $r ;

$result = array();
foreach( $msgs as $msgno ) <
$result [] = $tmp_result [ $msgno ];
>
>

$return = array( ‘res’ => $result ,
‘start’ => $start ,
‘limit’ => $limit ,
‘sorting’ => array( ‘by’ => $sort [ 0 ], ‘direction’ => $sort [ 1 ]),
‘total’ => imap_num_msg ( $this -> _imap_stream ));
$return [ ‘pages’ ] = ceil ( $return [ ‘total’ ] / $per_page );
return $return ;
>
?>

Hopefully someone will find this a jumpstarter for a sortable, paginated list:

public function listMessages ( $nStart = 0 , $nCnt = 10 ) <

if (! $this -> loaded ) <
return NULL ;
>

if (( $nStart + $nCnt ) > $this -> getNum ()) <
$nCnt = $this -> getNum ()- $nStart ;
>

$aMsgs = imap_fetch_overview ( $this -> rCon , ( $nStart + 1 ). ‘:’ .( $nStart + $nCnt ));
$aRet = array();
if ( $aMsgs ) <
foreach ( $aMsgs as $msg ) <
$aRet [ $msg -> udate ] = $msg ;
>
>

Note that these object-variables only exist when they are actually in the mail.

This means that if a mail has no subject, the property $val->subject will not exist.

Calling $val->subject will generate an notice:
Notice: Undefined property: subject in /home/html/inc/Mbox.php on line xxx

Use this to check it:
if (array_key_exists( «subject», get_object_vars($val)))
$subj=$val->subject;
else
$subj=»»;

This performance hint is useful if you need to print the result of imap_sort():

It’s faster to prepare large string with UIDs and then to call imap_fetchoverview once than calling imap_fetchoverview in a loop.

Judging from the comments here, it appears like people are forgetting the basics to already-available PHP sorting functions. Use usort(); and the tiniest custom function ever to compare them all.

Change the arguments to imap_fetch_overview to your own, obviously.

= imap_fetch_overview ( $imap_stream , ‘1:10’ , 0 );

usort ( $result , function( $a , $b ) <
return( $b -> udate — $a -> udate );
>);
?>

This usort function will look at each overview and order them in the exact latest to oldest message order as determined by the «udate» value for each message. This works. I’m using it. They’re sorted in the exact order they appear in my actual inbox. Why obfuscate it any more?

calling imap_fetch_overview() once is faster, than calling it
in a loop.

But if you want to get a «day sorted» list, you need to call it in a loop, cause if you enter a «string» of UIDs, they are always sorted by UID, not by the order you entered it.

Heres a little example how to get a date-sorted list:

/*Sort all msgs by Arrival Date. Newest = 0, oldest = Array Count*/
/*returns an array, containing the UIDs of messages*/
$SortedArray = imap_sort ( $Handle , SORTARRIVAL , 1 , SE_UID );

For ( $i = $Start ; $i $Start + $Limit ; $i ++) <
/*Read UID from Sorted Array*/
$UID = $SortedArray [ $i ];

/*Get Detailed MSG Infos*/
$Overview = imap_fetch_overview ( $Handle , $UID , FT_UID );

you want a sortet list of mails, but you get always the same order? your c-client seems to cause this. i realized this with linux libc6-2.3.6 and php-5.2.0

try this little code:

# here you try to sort by your criteria
$sort=@imap_sort($mbox,SORTDATE,1,SE_UID);

# here the order of the messages to fetch should be recognised, but it isn’t

$tmp=@imap_fetch_overview($mbox,implode(‘,’,$sort),FT_UID);
# so try to work around simply:
for($i=0;$i uid,$sort)]; >

so now you can use the sort by date, address, and so on.

To further explain ‘warrenfalk’s comment, the following sequences are exactly the same, and always returns messages with lowest UID to highest UID:

(always returned as 1,2,3,4,5)

The use of the $range parameter is explained in the example at: http://www.phpdig.net/ref/rn31re596.html

= imap_open ( «INBOX» , «graeme» , «inferno» );

// fetch message information for message 2
// and messages 4 to 6
$info = imap_fetch_overview ( $imap , «2,4:6» );

?>

// loop through the array
foreach ( $info as $msg ) <
echo »

» ;

// display the seen property nicely
if ( $msg -> seen == 1 ) <
$read = «Yes» ;
> else <
$read = «No» ;
>

// print other message information
printf ( »

» , $read );
printf ( »

» , $msg -> from );
printf ( »

» , $msg -> date );
printf ( »

» , $msg -> subject );
>

The Remote class here (https://github.com/newscloud/mail_filter/blob/master/app/protected/models/Remote.php) has a lot of examples of processing mailbox folders with imap-fetch-overview:

$this->open($account_id,$this->path_inbox);
$recent_messages = @imap_search($this->stream, ‘SINCE «‘.date(«j F Y»,$tstamp).'»‘,SE_UID); // 30 November 2013
if ($recent_messages===false) continue; // to do — continue into next account
$result = imap_fetch_overview($this->stream, implode(‘,’,array_slice($recent_messages,0,$message_limit)),FT_UID);
foreach ($result as $item) <
$msg = $this->parseHeader($item);

English:
I’ve found that for some messages, this function and also function imap_headerinfo(), can’t decode the message_id information and returns an ID like » «

In these cases, I use the following to get the correct messageid:

Spanish:
Con algunos mensajes, esta funcion, al igual que la funcion imap_headerinfo(), no pueden decodificar correctamente la información del ID de mensaje y devuelven un ID como este » «

En esos casos, uso lo siguiente para obtener el ID de mensaje correcto:

This seems to retrieve incomplete values for headers, instead of getting the entire value, it gets the first. for example, this is a valid To: header

Imap_fetch_overview и новейшая/самая старая почта

Я борюсь с последовательностью для imap_fetch_overview. Является ли почта 1 самой старой или самой новой почтой? Если приходит новая почта, она получает более высокий идентификатор или нет?

Создан 26 фев. 16 2020-02-26 18:27:19 joe-jeff

не уверены, что они отсортированы, см. ‘Imap_sort()’ и соответствующую информацию в документации. – Dave 26 фев. 16 2020-02-26 19:03:25

Итак, на основе imap_sort Я строю строку, которую я передаю imap_fetch_overview? – joe-jeff 26 фев. 16 2020-02-26 19:18:19

ваше редактирование может вернуть кучу самых последних, но не обязательно в том порядке, в котором это возвращение. это может быть компромисс производительности. см. http://php.net/manual/en/function.imap-fetch-overview.php#88235 – Dave 26 фев. 16 2020-02-26 19:35:35

, если вы предоставили список последовательностей, как показывает ваш код, в соответствии с этим (http://php.net/manual/ en/function.imap-fetch-overview.php # 33631), он по-прежнему будет возвращать результаты с минимальным наивысшим UID, который может не соответствовать дате – Dave 26 фев. 16 2020-02-26 19:43:20

1 ответ

Для второй части вопроса,

Каждая почта будет иметь разные идентификаторы, но не выше или ниже. Это просто отобранно, но уникально.

Для первой части вашего вопроса,

Если вы хотите, чтобы найти самую старую или новейшую почту, вы должны использовать метод date как:

затем сравнить эту почту с помощью возвращаемых дат.

Создан 26 фев. 16 2020-02-26 19:11:01 Masum Nishat

Получить атрибуты — imap_fetchbody () код

Как получить вложения в электронном письме?

возвращенные вложения даже не имеют правильного размера файла, а возвращенные данные выглядят примерно так

Идентичные файлы имеют одинаковый размер, даже если они являются копиями

Я думаю, что вы усложняете ваш код.

Ваша проблема в том, что вы не получили свои данные кодирования

прежде чем вы сможете получить свои реальные данные в этом файле, пожалуйста, посмотрите на

так что вы можете попробовать распечатать это:

Примечание: $ section — это часть ваших файлов.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Read From Date Subject
%s %s %s %s