TG Telegram Group & Channel
ServerAdmin.ru | United States America (US)
Create: Update:

​​Когда готовил материал по отправке email сообщений через curl, подумал, он же наверное и читать умеет. И не ошибся. Curl реально умеет читать, и не только, почту по imap. Это открывает очень широкие возможности по мониторингу почтовых серверов с помощью утилиты.

Меня не раз спрашивали, как удобнее всего настроить мониторинг почтовых сообщений в ящике, чтобы приходили уведомления при получении письма определённого содержания. Я обычно советовал либо на самом почтовом сервере прямо в ящике анализировать текст писем, если это возможно. Либо использовать какие-то программы типа fetchmail, imapsync или обычные почтовые клиенты. И уже в них как-то анализировать письма.

Но с curl всё получается намного проще. Она много чего умеет. Расскажу по порядку. Сразу важная сноска, которая сильно затормозила меня в этом вопросе. Когда будете пробовать, возьмите свежую версию curl. Более старые некоторые команды для imap не поддерживают. Я сначала наткнулся на это в старом сервере Centos 7. Потом уже перешёл на современный Debian и там всё получилось.

Сразу перенесём логин с паролем в отдельный файл ~/.netrc:

machine mail.server.tld login username password supersecretpw

Проверяем количество сообщений в imap папке INBOX:

# curl "imap:/mail.server.tld" -n -X 'STATUS INBOX (MESSAGES)'
* STATUS INBOX (MESSAGES 405)

Получили число 405. Посмотрим, сколько из них непрочитанных:

# curl "imap://mail.server.tld" -n -X 'STATUS INBOX (UNSEEN)'
* STATUS INBOX (UNSEEN 147)

147 непрочитанных сообщений. Думаю, идею вы поняли. С помощью curl можно напрямую передавать серверу команды imap.

Смотрим список директорий в ящике:

# curl "imap://mail.server.tld" -n -X 'LIST "" "*"'
* LIST (\HasNoChildren \Marked \Trash) "/" Trash
* LIST (\HasNoChildren \UnMarked \Junk) "/" Junk
* LIST (\HasNoChildren \UnMarked \Drafts) "/" Drafts
* LIST (\HasNoChildren \Sent) "/" Sent
* LIST (\HasChildren) "/" INBOX

Или просто:

# curl "imap://mail.server.tld" -n

Ищем в ящике письма с темой test:

# curl "imap://mail.server.tld/INBOX?SUBJECT%20test" -n
* SEARCH 62 404 405 406
или так:
# curl "imap://mail.server.tld/INBOX" -n -X 'SEARCH HEADER Subject test'

Сообщения от определённого адресата:

# curl "imap://mail.server.tld/INBOX" -n -X 'SEARCH From [email protected]'
* SEARCH 292 404 405 406

Получили UIDs писем. Смотрим содержание письма с конкретным UID. Для этого надо добавить ключ -v, так как оно передаётся в отладочной информации, как и все остальные ответы сервера:

# curl -v "imap://mail.server.tld/INBOX" -n -X 'FETCH 406 BODY[TEXT]'
или так:
# curl -v "imap://mail.server.tld/INBOX;UID=406/;BODY=TEXT" -n

И так далее. Письмо после проверки можно пометить прочтённым, переместить в другую директорию, удалить. Чтобы осмысленно дёргать imap сервер, достаточно посмотреть описание протокола. Информация по нему легко находится в поиске.

Команды imap рассмотрены в упоминаемом недавно курсе по сетям от Созыкина Андрея. Вот конкретный урок: ▶️ Протокол IMAP. Вообще, было интересно во всём этом разобраться. Если надо будет настроить мониторинг очередного почтового сервера, попробую что-то применить с помощью curl.

Первое, что приходит в голову в плане мониторинга - отправлять письмо с меткой времени в теле, а потом забирать его и анализировать эту метку. Если метка старая, значит письма не ходят. Это надёжнее, чем просто проверять статус служб и доступность портов. Тут и smtp, и imap сервер проверяются. И реализуется полностью с помощью curl и zabbix.

#curl #terminal

​​Когда готовил материал по отправке email сообщений через curl, подумал, он же наверное и читать умеет. И не ошибся. Curl реально умеет читать, и не только, почту по imap. Это открывает очень широкие возможности по мониторингу почтовых серверов с помощью утилиты.

Меня не раз спрашивали, как удобнее всего настроить мониторинг почтовых сообщений в ящике, чтобы приходили уведомления при получении письма определённого содержания. Я обычно советовал либо на самом почтовом сервере прямо в ящике анализировать текст писем, если это возможно. Либо использовать какие-то программы типа fetchmail, imapsync или обычные почтовые клиенты. И уже в них как-то анализировать письма.

Но с curl всё получается намного проще. Она много чего умеет. Расскажу по порядку. Сразу важная сноска, которая сильно затормозила меня в этом вопросе. Когда будете пробовать, возьмите свежую версию curl. Более старые некоторые команды для imap не поддерживают. Я сначала наткнулся на это в старом сервере Centos 7. Потом уже перешёл на современный Debian и там всё получилось.

Сразу перенесём логин с паролем в отдельный файл ~/.netrc:

machine mail.server.tld login username password supersecretpw

Проверяем количество сообщений в imap папке INBOX:

# curl "imap:/mail.server.tld" -n -X 'STATUS INBOX (MESSAGES)'
* STATUS INBOX (MESSAGES 405)

Получили число 405. Посмотрим, сколько из них непрочитанных:

# curl "imap://mail.server.tld" -n -X 'STATUS INBOX (UNSEEN)'
* STATUS INBOX (UNSEEN 147)

147 непрочитанных сообщений. Думаю, идею вы поняли. С помощью curl можно напрямую передавать серверу команды imap.

Смотрим список директорий в ящике:

# curl "imap://mail.server.tld" -n -X 'LIST "" "*"'
* LIST (\HasNoChildren \Marked \Trash) "/" Trash
* LIST (\HasNoChildren \UnMarked \Junk) "/" Junk
* LIST (\HasNoChildren \UnMarked \Drafts) "/" Drafts
* LIST (\HasNoChildren \Sent) "/" Sent
* LIST (\HasChildren) "/" INBOX

Или просто:

# curl "imap://mail.server.tld" -n

Ищем в ящике письма с темой test:

# curl "imap://mail.server.tld/INBOX?SUBJECT%20test" -n
* SEARCH 62 404 405 406
или так:
# curl "imap://mail.server.tld/INBOX" -n -X 'SEARCH HEADER Subject test'

Сообщения от определённого адресата:

# curl "imap://mail.server.tld/INBOX" -n -X 'SEARCH From [email protected]'
* SEARCH 292 404 405 406

Получили UIDs писем. Смотрим содержание письма с конкретным UID. Для этого надо добавить ключ -v, так как оно передаётся в отладочной информации, как и все остальные ответы сервера:

# curl -v "imap://mail.server.tld/INBOX" -n -X 'FETCH 406 BODY[TEXT]'
или так:
# curl -v "imap://mail.server.tld/INBOX;UID=406/;BODY=TEXT" -n

И так далее. Письмо после проверки можно пометить прочтённым, переместить в другую директорию, удалить. Чтобы осмысленно дёргать imap сервер, достаточно посмотреть описание протокола. Информация по нему легко находится в поиске.

Команды imap рассмотрены в упоминаемом недавно курсе по сетям от Созыкина Андрея. Вот конкретный урок: ▶️ Протокол IMAP. Вообще, было интересно во всём этом разобраться. Если надо будет настроить мониторинг очередного почтового сервера, попробую что-то применить с помощью curl.

Первое, что приходит в голову в плане мониторинга - отправлять письмо с меткой времени в теле, а потом забирать его и анализировать эту метку. Если метка старая, значит письма не ходят. Это надёжнее, чем просто проверять статус служб и доступность портов. Тут и smtp, и imap сервер проверяются. И реализуется полностью с помощью curl и zabbix.

#curl #terminal
👍148👎4


>>Click here to continue<<

ServerAdmin.ru






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)