Запросы по протоколу imap из командной строки
Запросы по протоколу 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