Curl IMAP

Использование curl для подключения к почтовому ящику по протоколу imap

    Чтение электронной почты
    POP3

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


    Любая процедура начинается с команды клиента. Любая команда клиента начинается с префикса-идентификатора (обычно короткая буквенно-цифровая строка, например, A0001, A0002 и т. д.), называемого меткой (tag). Для каждой команды клиент генерирует свою метку.

    У сервера POP3 могут быть следующие порты:
    110/TCP — стандартный порт для незашифрованных соединений POP3;
    995/TCP — порт для защищённого соединения POP3S

    POP3 и IMAP могут выполняться по защищенному соединению, и оба могут выполняться с использованием явного или неявного TLS.
    "Явный" метод, означает, что клиент подключается к серверу, используя небезопасное соединение
    Например:
    curl --ssl imap://mail.example.com
    curl pop3://mail.example.com/ --ssl-reqd
    «Неявный» SSL означает, что соединение защищается уже при первом подключении ( pop3s:// или imaps:// )
    Например:
    curl pop3s://mail.example.com/
    curl imaps://mail.example.com/inbox

    Чтобы получить сообщение, нам нужен идентификатор этого сообщения, поэтому нам нужно узнать, сколько сообщений существует, поскольку идентификаторы сообщений являются последовательными.
    Получить сообщение несложно, если вы знаете папку, из которой оно пришло, и идентификатор сообщения, которое вы хотите получить.
    Получение сообщения включает в себя как заголовки Кому (To), От (From), Дата (Date), Тема (Subject) и само тело
    Если необходимо получить только заголовки или их подмножество, необходимо закодировать это в запросе.

    UIDVALIDITY — это уникальный идентификатор достоверности почтового ящика в протоколе IMAP
    Метка UIDVALIDITY должна присутствовать во время всех сеансов IMAP, только в том случае, если идентификаторы сообщений в ящике оставались неизменными
    Пока значение UIDVALIDITY для почтового ящика не изменилось, все имеющиеся UID сообщений будут продолжать указывать на одно и то же сообщение.
    Если в почтовом ящике имеются сообщения с различными идентификаторами, то значение UIDVALIDITY при следующем сеансе должно увеличиться. Это позволяет клиентам быстро определять, появились ли в почтовом ящике новые сообщения с момента последнего к нему обращения.
    Можно указать значение UIDVALIDITY в запросе, включив его в URL-адрес IMAP, например так:
    curl 'imaps://imap.example.com/inbox;UIDVALIDITY=6' ...
    Если UIDVALIDITY что-то изменилось, curl сообщит:
    curl: (78) Mailbox UIDVALIDITY has changed
    Можно увидеть значение UIDVALIDITY для почтового ящика, передав параметр -v в curl при выполнении, например, EXAMINE:
    curl -v imaps://imap.example.com/ -X 'examine inbox'
    * OK [UIDVALIDITY 1669753653] Ok Необходимым условием для использования значения UIDVALIDITY является запрос идентификаторов сообщений. Можно запросить атрибут UID при получении информации о сообщениях
    curl --insecure --url 'imaps://imap.yandex.ru/Spam;UIDVALIDITY=1669753653' -X 'UID FETCH 674 (ENVELOPE)' --user "mmegatest@yandex.ru:cudvcsqy"
    Если почтовый ящик UIDVALIDITY по-прежнему имеет значение 1669753653 (потому что если он изменился, наш UID больше не действителен), команда извлечёт конверт с сообщением.

    HIGHESTMODSEQ — это наибольшее значение последовательности модификации (mod-sequence) всех сообщений в почтовом ящике.

    IMAP

    #Подключение почты с помощью по защищенному протоколу pop3s #Следующий запрос выведет номера всех сообщений curl pop3s://pop.yandex.ru --user "mmegatest@yandex.ru:cudvcsqy" #Следующий запрос выведет информацию по номеру сообщения curl pop3s://pop.yandex.ru/1 --user "mmegatest@yandex.ru:cudvcsqy" #Удаление сообщения curl --request DELE pop3s://pop.yandex.ru/1 --user "mmegatest@yandex.ru:cudvcsqy" #Получить список почтовых ящиков curl imaps://imap.yandex.ru/ --user "mmegatest@yandex.ru:cudvcsqy" #Альтернативный вариант curl imaps://imap.yandex.ru/ -X 'LIST "" "*"' --user "mmegatest@yandex.ru:cudvcsqy" #Получить количество сообщений в папке Spam curl imaps://imap.yandex.ru/ --request "EXAMINE Spam" --user "mmegatest@yandex.ru:cudvcsqy" * FLAGS (\Answered \Seen \Draft \Deleted $Forwarded) * 3 EXISTS * 3 RECENT * OK [UNSEEN 1] * OK [PERMANENTFLAGS (\Answered \Seen \Draft \Flagged \Deleted $Forwarded \*)] Limited * OK [UIDNEXT 676] Ok * OK [UIDVALIDITY 1669753653] Ok #Альтернативный вариант curl imaps://imap.yandex.ru/ --request "STATUS Spam (MESSAGES)" --user "mmegatest@yandex.ru:cudvcsqy" * STATUS Spam (MESSAGES 3) #Кол-во непрочитанных сообщений curl imaps://imap.yandex.ru/ --request "STATUS Spam (UNSEEN)" --user "mmegatest@yandex.ru:cudvcsqy" #Получить кол-во последних сообщений curl imaps://imap.yandex.ru/ --request "STATUS Spam (RECENT)" --user "mmegatest@yandex.ru:cudvcsqy" #Получить список сообщений в папке Spam curl imaps://imap.yandex.ru/Spam -X 'fetch 1:* (UID FLAGS)' --user "mmegatest@yandex.ru:cudvcsqy" * 1 FETCH (UID 673 FLAGS (\Recent encrypted)) * 2 FETCH (UID 674 FLAGS (\Seen \Recent encrypted)) * 3 FETCH (UID 675 FLAGS (\Recent encrypted)) #Получить сообщение с UID=674 curl --insecure --url "imaps://imap.yandex.ru/Spam;UID=674" --user "mmegatest@yandex.ru:cudvcsqy" #Получить сообщение с MAILINDEX=1 curl --insecure --url "imaps://imap.yandex.ru/Spam;MAILINDEX=1" --user "mmegatest@yandex.ru:cudvcsqy" #Получить только дату сообщения curl --insecure --url "imaps://imap.yandex.ru/Spam;UID=674;SECTION=HEADER.FIELDS%20(DATE)" --user "mmegatest@yandex.ru:cudvcsqy" Date: Fri, 21 Mar 2025 01:37:37 +0000 #Получить дату, от кого, кому и тему письма curl --insecure --url "imaps://imap.yandex.ru/Spam;MAILINDEX=1;SECTION=HEADER.FIELDS%20(DATE%20FROM%20TO%20SUBJECT)" --user "mmegatest@yandex.ru:cudvcsqy" #Пример 1 curl --insecure --url 'imaps://imap.yandex.ru/Spam;UID=674;UIDVALIDITY=1' --user "mmegatest@yandex.ru:cudvcsqy" curl: (78) Mailbox UIDVALIDITY has changed #Аналогичный результат можно получить с помощью альтернативного синтаксиса: curl --insecure --url 'imaps://imap.yandex.ru/Spam;UIDVALIDITY=1' -X 'UID FETCH 674 (ENVELOPE)' --user "mmegatest@yandex.ru:cudvcsqy" curl: (78) Mailbox UIDVALIDITY has changed #Пример 2 curl --insecure --url 'imaps://imap.yandex.ru/Spam;UID=674;UIDVALIDITY=1669753653' --user "mmegatest@yandex.ru:cudvcsqy" #Чтение типа содержимого сообщения curl --insecure --url 'imaps://imap.yandex.ru/Spam' -n -X 'FETCH 1 BODY' --user "mmegatest@yandex.ru:cudvcsqy" * 1 FETCH (BODY (("text" "html" ("charset" "utf-8") NIL NIL "8bit" 1070 16)("application" "octet-stream" ("name" "photo.jpg") "<78a344db7521a3279dfbe97d7c0da0be.jpg>" NIL "base64" 2) "related")) #Получить информацию о сервере curl --insecure --url "imaps://imap.yandex.ru" --request "CAPABILITY" --user "mmegatest@yandex.ru:cudvcsqy" * CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST UIDPLUS ENABLE ID IDLE MOVE
    Опции

    --request - запрос для отправки на сервер
    --insecure - не проверять цепочку доверия сертификата.
    --verbose
    --url

    Команды протокола IMAP

    Некоторые команды протокола IMAP (Internet Message Access Protocol):
    IMAP_LOGIN — открывает соединение.
    CAPABILITY — запрашивает список возможностей, которые поддерживает сервер.
    NOOP — используется для периодического опроса на предмет новых сообщений или обновлений статуса сообщений в период бездействия.
    SELECT — помогает выбрать почтовый ящик для доступа к сообщениям.
    CHECK — используется для установки контрольной точки в почтовом ящике.
    CREATE — используется для создания почтового ящика с указанным именем.
    DELETE — используется для безвозвратного удаления почтового ящика с заданным именем.
    RENAME — используется для изменения имени почтового ящика.
    CLOSE — закрывает почтовый ящик, при этом все сообщения, помеченные флагом \DELETED, физически удаляются из него.
    LOGOUT — сообщает серверу, что клиент завершил сеанс.
    APPEND — позволяет посылать сообщения в почтовый ящик, добавляя сообщение к концу файла почтового ящика.
    SEARCH — используется для поиска сообщений.
    FETCH — используется для получения сообщений.
    STORE — используется для сохранения сообщений.
    COPY — используется для копирования сообщений.
    LIST - Получить список всех почтовых ящиков клиента; имеет два параметра
    STATUS - Формирует запрос о текущем состоянии почтового ящика


    Источник: https://ru.wikipedia.org/wiki/IMAP

    Флаги сообщений

    Благодаря системе флагов, определённой в IMAP4, клиент может отслеживать состояние сообщения (прочитано, отправлен ответ, удалено и т. д.); данные о флагах хранятся на сервере.
    В IMAP 4.1 существует два типа флагов. Флаг может быть постоянным или действующим только на время данной сессии.
    Все системные флаги начинаются с символа \


    В настоящее время определены следующие системные флаги:
    \seen — сообщение прочитано
    \answered — на сообщение отправлен ответ
    \flagged — сообщение отмечено как «важное»
    \deleted — сообщение отмечено как удалённое
    \draft — сообщение отмечено как черновик
    \recent — недавнее сообщение (впервые появилось в ящике в ходе текущей сессии)

    STATUS

    STATUS - Формирует запрос о текущем состоянии почтового ящика
    Первым параметром для этой команды является имя почтового ящика, к которому она применяется. Второй параметр — это список критериев, по которым клиент хочет получить информацию.
    Пользователь может получить информацию по критериям:
    MESSAGES — общее число сообщений в почтовом ящике
    RECENT — число сообщений с флагом \recent
    UIDNEXT — идентификатор UID, который будет назначен новому сообщению
    UIDVALIDITY — уникальный идентификатор почтового ящика
    UNSEEN — число сообщений без флага \seen


    UID

    UID используется в связке с командами FETCH, COPY, STORE или SEARCH. С её помощью в этих командах можно использовать реальные идентификационные номера UID вместо последовательности чисел из диапазона номеров сообщений.

    SEARCH

    SEARCH - поиск сообщений по критериям в активном почтовом ящике с последующим отображением результатов в виде номера сообщения
    Возможен поиск сообщений, в теле которых имеется определённая текстовая строка, или имеющих определённый флаг, или полученных до определённой даты и т. д.


    Источник: https://habr.com/ru/articles/525172/
    https://www.php.net/manual/ru/function.imap-search.php

    #Найти сообщения полученные начиная с даты curl --insecure --url "imaps://imap.yandex.ru/Spam" -X 'search SINCE "1-Mar-2025"' --user "mmegatest@yandex.ru:cudvcsqy" * SEARCH 1 2 3 #Найти сообщение по тексту в теле сообщения curl --insecure --url "imaps://imap.yandex.ru/Spam" -X 'SEARCH TEXT "2003"' --user "mmegatest@yandex.ru:cudvcsqy" * SEARCH 1 #Поиск сообщений по тексту в теле сообщения (кириллица) curl --insecure --url "imaps://imap.yandex.ru/Spam" -X 'SEARCH charset utf-8 TEXT "Проверка"' --user "mmegatest@yandex.ru:cudvcsqy" * SEARCH 2 3 #Альтернативный вариант curl --insecure --url "imaps://imap.yandex.ru/Spam" -X 'SEARCH charset utf-8 BODY "Проверка"' --user "mmegatest@yandex.ru:cudvcsqy" * SEARCH 2 3 #Поиск непрочитанных собщений curl --insecure --url "imaps://imap.yandex.ru/INBOX" -X 'SEARCH UNSEEN' --user "mmegatest@yandex.ru:cudvcsqy" * SEARCH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ........
    Источники
    Последнее изменение: 24.03.2025 16:52


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ