зеркало из
				https://github.com/iharh/notes.git
				synced 2025-10-31 13:46:08 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			110 строки
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			110 строки
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| https://t.me/srv_admin/2596
 | |
| https://t.me/srv_admin/2729
 | |
| spec mailx util. 
 | |
| 
 | |
| https://everything.curl.dev/usingcurl/smtp
 | |
| 
 | |
| # curl -v --url "smtp://mail.server.ru:25" --mail-from "root@server.ru" --mail-rcpt "user@gmail.com" --user 'root@server.ru:password123' --upload-file ~/mail.txt
 | |
| 
 | |
| Содержимое mail.txt примерно следующее:
 | |
| 
 | |
| From: "Vladimir" <root@server.ru>
 | |
| To: "User" <user@gmail.com>
 | |
| Subject: Mail from curl
 | |
| 
 | |
| Hello! How are you?
 | |
| 
 | |
| Причём с помощью curl очень удобно управлять адресом отправителя. 
 | |
| В mail.txt его любой указать можно, а не тот, от которого идёт отправка. 
 | |
| Впрочем, как и другие заголовки.
 | |
| 
 | |
| Не очень хорошая идея светить почтовый пароль в консоли. 
 | |
| Можно его спрятать в .netrc файл. 
 | |
| Для этого его надо создать в домашней директории пользователя ~/.netrc. Содержание такое:
 | |
| 
 | |
| machine mail.server.ru login root@server.ru password password123
 | |
| machine mail.server02.ru login user@server02.ru password password12345
 | |
| 
 | |
| Каждый сервер на новой строке. Удобно, если используется отправка через несколько разных серверов. 
 | |
| В соответствии с указанным smtp сервером берутся настройки учётной записи из файла .netrc. 
 | |
| Команда на отправку с использованием .netrc будет такая:
 | |
| 
 | |
| # curl -v --url "smtp://mail.server.ru:25" --mail-from "root@server.ru" --mail-rcpt "user@gmail.com" --netrc --upload-file ~/mail.txt
 | |
| 
 | |
| Так как мы используем ключ -v, в консоли видим весь лог общения с почтовым сервером, что может быть удобно для отладки. 
 | |
| Если не указывать никаких ключей для TLS, то будет использоваться нешифрованное соединение. 
 | |
| Если нужно только шифрованное, то можно добавить ключ --ssl-reqd, 
 | |
| а если хотите чтобы при поддержке сервером шифрование использовалось, а если поддержки нет, то нет, тогда добавьте ключ --ssl. 
 | |
| 
 | |
| Если используется шифрованное соединение и порт 465, то достаточно просто указать адрес сервера в виде smtps://mail.server.ru. 
 | |
| Отдельно указывать порт и ключи для ssl не обязательно. 
 | |
| 
 | |
| Для того, чтобы явно указать HELO / EHLO при отправке, добавьте его через слеш после адреса сервера. Примерно так: 
 | |
| smtp://mail.server.ru/client_helo.server.ru
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| Когда готовил материал по отправке 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 vladimir@zeroxzed.ru'
 | |
| * 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 (https://www.youtube.com/watch?v=VGYHXIdtNS4). Вообще, было интересно во всём этом разобраться. Если надо будет настроить мониторинг очередного почтового сервера, попробую что-то применить с помощью curl. 
 | |
| 
 | |
| Первое, что приходит в голову в плане мониторинга - отправлять письмо с меткой времени в теле, а потом забирать его и анализировать эту метку. Если метка старая, значит письма не ходят. Это надёжнее, чем просто проверять статус служб и доступность портов. Тут и smtp, и imap сервер проверяются. И реализуется полностью с помощью curl и zabbix.
 | |
| 
 | |
| Sozykin - IMAP of 15:06
 | |
|     https://www.youtube.com/watch?v=VGYHXIdtNS4
 | 
