Запросы по протоколу imap из командной строки
2024-04-13
·
3 мин. для прочтения
Запросы по протоколу imap из командной строки.
Содержание
1 Выполнение запросов imap с использованием curl
- Работа с ящиками imap с помощью curl.
1.1 Необходимая информация
- Необходимая информация:- адрес почтового сервера;
- почтовый логин;
- почтовый пароль.
 
- В примерах будем подключаться к серверу IMAP imap.example.com.
- URL подключения:- подключение без шифрования: imap://mail.example.com/;
- подключение по SSL: imaps://mail.example.com/;
 
- подключение без шифрования: 
- Будем использовать следующие учётные данные:- логин: user;
- пароль: password.
 
- логин: 
- Пароли лучше хранить в базе данных паролей или менеджере паролей:- netrc: Emacs. Почта. Парольная аутентификация;
- pass: Менеджер паролей pass.
 
1.2 Список папок
- Выполним запрос к серверу IMAP:curl --url "imap://mail.example.com/" --user "user:password"
- При запросе через SSL можно дополнительно указать опцию insecure:curl --insecure --url "imaps://mail.example.com/" --user "user:password"
- Если не указать пароль в аргументе --user,curlзапросит пароль перед выполнением запроса.
- Получим список почтовых ящиков:* LIST (\HasNoChildren \Unmarked) "|" Archive * LIST (\HasNoChildren \Unmarked \Drafts) "|" Drafts * LIST (\HasNoChildren \Unmarked \NoInferiors) "|" INBOX * LIST (\HasNoChildren \Unmarked \Sent) "|" Sent * LIST (\HasNoChildren \Unmarked \Junk) "|" Spam * LIST (\HasNoChildren \Unmarked \Trash) "|" Trash
- Если название папки нечитабельно, его можно расшифровать (см. Почта. Кодировка папок IMAP).
1.3 Количество сообщений
- Чтобы получить сообщение, нам нужен идентификатор сообщения.
- Выясним, сколько сообщений в почтовом ящике, поскольку идентификаторы сообщений являются последовательными номерами.
- Посмотрим, сколько сообщений существует в папке Archive:
curl --insecure --url "imaps://mail.example.com/" --request "EXAMINE Archive" --user "user:password"
- Строчка ответа с ключевым словом EXISTSукажет количество сообщений в папке.
- Предположительно, номера сообщений идут от 1 до количества сообщений (не обязательно).
1.4 Получение сообщения
- Получим сообщение, задав его идентификатор (например, 5):curl --insecure --url "imaps://mail.example.com/Archive;UID=5" --user "user:password"
- Получение сообщения включает в себя как заголовки, так и тело.
- Если необходимо получить только заголовки или их подмножество, необходимо закодировать это в запросе.
- Получим заголовки Кому (To), От (From), Дата (Date), Тема (Subject):curl --insecure --url "imaps://mail.example.com/Archive;UID=5;SECTION=HEADER.FIELDS%20(DATE%20FROM%20TO%20SUBJECT)" --user "user:password"
- Можно отправить запрос отдельно (например, запросив Subject):curl --insecure --verbose --url "imaps://mail.example.com/Archive" --request "fetch 5 BODY.PEEK[HEADER.FIELDS (Subject)]" --user "user:password"
- Однако при программном использовании API-интерфейса curl ответы не декодируются. Поэтому, без флага --verboseмы бы получили нулевой вывод.
1.5 Простые скрипты
- Получить темы первых десяти сообщений в указанном почтовом ящике:#!/bin/bash # Dump the subject of the first ten messages in the folder for id in $(seq 1 10) do echo "Message ${id}" curl --insecure \ --url "imaps://mail.example.com/Archive;UID=${id};SECTION=HEADER.FIELDS%20(SUBJECT)" \ --user "user:password" done
- Получить темы всех сообщений в указанном почтовом ящике:#!/bin/bash # Dump the subject of all messages in the folder while true do echo "Message ${id}" curl --insecure \ --url "imaps://mail.example.com/Archive;UID=${id};SECTION=HEADER.FIELDS%20(SUBJECT)" \ --user "user:password" || exit id=$(expr $id + 1) done
