Комментарии 6
Пользуясь случаем спрошу:
может есть у кого готовый (прошедший проверку временем) скрипт для zabbix, который читает почту и при совпадении "темы" и "слов в теле" письма поднимает триггер?
А можете уточнить - используемые в примере библиотеки:
а) подключают только imaps (порт 993/TCP/TLS), или умеет STARTTLS на порту imap (порт 143/TCP)?
б) если умеет STARTTLS - он точно использует те же настройки шифрования (версии протоколов TLS и наборы шифров), что и для imaps?.. (например, в PHP сталкивались с ситуацией, когда библиотека для imaps умеет tls 1.2, а для imap/starttls - максимум tls 1.1, который и более старые версии нынче надо отключать из соображений безопасности, оставлять только TLS 1.2 и 1.3).
Ну в б) самое интересное - как описывал выше, сталкивались с ситуациями, когда в библиотеке эти два метода подключения почему-то используют разные версии протоколов TLS...
Что до мейлру - то да, он поддерживает imaps и imap/starttls, но только версии TLS 1.2, не старее (что хорошо), но и не новее. Но тут уже проблема на стороне мейлру, а не библиотеки.
Спасибо, пригодилась статья.
Однако заметил что такой подход к декодированию строк, хотя может сработать на отдельном письме, не устойчивый:
decode_header(msg["Subject"])[0][0].decode()
по индексу [0][0] может быть и строка, и байты - будет ошибка
для
decode
не учитывается опциональная кодировка по индексу [0][1], а берётся по-умолчаниюкроме пары по индексу [0] могут прийти и приходят и другие пары, каждая со своей кодировкой
Вобщем нужно писать свою обёртку над decode_header
; та что из коробки не готова к реальному использованию вобще.
да, тут надо варианты предусмотреть:
encoding = decode_header(msg_from_subj)[0][1]
msg_from_subj = decode_header(msg_from_subj)[0][0]
if isinstance(msg_from_subj, bytes):
msg_from_subj = msg_from_subj.decode(encoding)
if isinstance(msg_from_subj, str):
pass
у меня вот эта проверка довольно стабильно работает, каких-то нареканий пока не поступало
Читаем почту mail.ru из python при помощи imap