E-mail информатор на ESP32

Введение

Никакого ноу-хау. E-Mail информатор как устройство, вещь не новая. В сети есть аналогичные устройства. Так что в плане идеи ничего нового.


Для чего оно мне?

На работе и дома я пользуюсь электронной почтой. В принципе, на компьютере есть всплывающие сообщения о новых письмах, как у почтовых клиентах, так и у WEB-версиях почтовых клиентов. Но! Во первых – уведомление не висит постоянно, а во вторых, я далеко не всегда нахожусь возле компьютера, или бывает еще хуже – я просто забываю запустить почтовый клиент. В общем, есть способ прозевать важное письмо! И не редко мои коллеги лично сообщают мне о письмах.

Концепт велосипеда

Зачем изобретать? Сначала я решил поискать готовое устройство или программную реализацию и повторить. Сходу не нашел. Ну как сходу? Пару дней порылся в интернете и ничего толково описанного или приемлемого для себя не нашёл. Ну и забросил это дело. Позже, один мой приятель указал мне на библиотеку для работы с почтой. Я попробовал библиотеку, она оказалась вполне работоспособной, и идея собрать информатор снова задышала!
На чем будем делать? Из названия уже понятно, что сердцем устройства является ESP32. В моём случае это плата ESP32-PICO- KIT, которая была у меня в запасе. Индицировать будем светодиодом WS2812B, а точнее обрезком ленты из четырёх светодиодов. Из компонентов собственно всё. Всё это будет расположено в небольшой коробочке стилизованной под конверт. О коробочке чуть позже.

Функции

Мой информатор будет читать четыре ящика. Каждый из четырёх светодиодов будет отвечать за свой ящик. Настройка параметров осуществляется через WEB-интерфейс.
При подаче питания, информатор плавно вспыхивает всеми светодиодами белым цветом. Если информатор не находит точку доступа или точка доступа еще не была прописана, то информатор вспыхивает желтым цветом. При успешном подключении к точке доступа, информатор вспыхивает зелёным цветом.

При первом включении, информатор работает в режиме точки доступа.
Параметры точки доступа информатора:

  • IP-адрес: 192.168.4.1
  • SSID: “E-mail”
  • Пароль: “1234567890 “

Набрав в адресной строке браузера 192.168.4.1 будет предложено ввести имя пользователя и пароль.
  1. имя пользователя: admin
  2. пароль: notifier2020
после чего откроется страничка информатора.

На страничке указываются адреса, сервера и пароли ваших почтовых ящиков. Цвет свечения светодиода для каждого ящика. Интервал опроса ящиков в минутах.

Кнопки:
«Save accounts» – сохранение параметров ящиков
«Force read» – принудительное чтение
«Test LED» – тестирование светодиодов. При включенном тесте светодиодов – активируется FTP-сервер. FTP-сервер требуется для отладочных целей, например: изменения HTML-странички информатора.
  • Логин FTP — ESP32
  • Пароль FTP — ESP32

Далее идут настройки точки доступа, к которой информатор будет подключен. Требуется указать SSID и пароль вашей домашней точки доступа.
Вот и всё про функционал. Указали параметры ящиков, цвет светодиода, интервал чтения и поехали!

Корпус

Как я уже и говорил – корпус стилизован под конверт, напечатан на 3D-принтере.


Корпус состоит из четырёх печатных частей:

  1. Передняя часть – смоделирована и напечатана с первой попытки.

  1. Средняя часть – перегородка, панель светодиодов. Удалась со второй попытки. В первой версии я сделал слишком тонкие перегородки секторов, которые быстро сломались.

  1. Задняя часть – отсек для ПП контроллера ESP32

  1. Рассеиватель – напечатан из прозрачного пластика. Сначала, в качестве рассеивателя я использовал кусок прозрачного оргстекла заматированного наждачной бумагой, но рассеивание было так себе. У печатного варианта рассеивание шире. Вероятно из-за ячеистого заполнения, но возможно при печати сплошным заполнением тоже будет хорошо.

Корпус скреплен шурупами. После я его окрасил матовой черной краской. Краска отчасти скрывает артефакты печати.

Вот так собирается корпус:


Включение



Финал

Вот так удобно разместился информатор на коробе для розеток.

Резюмируя, скажу, что устройство для меня оказалось очень полезным. Радует глаз, ожидаемый эффект получен – письма теперь не пропускаю.
В планах:
  1. Переделать хранение аккаунтов. Сейчас аккаунты хранятся на SPIFFS микроконтроллера, доступ к которому осуществляется через FTP-сервер.
  2. Улучшение WEB-интерфейса, адаптация к мобильной версии. Требуется помощь сообщества, в HTML я профан.

Файлы и ссылки

Исходники на github
Детали корпуса для 3D-печати

Котейка


Добавить в избранное +81 +112
+
avatar
  • X3Shim
  • 18 мая 2020, 06:32
-1
Как быть с двухфакторной аутентификацией?
+
avatar
0
Не совсем понял ваш вопрос. В текущей реализации предусмотрена авторизация для открытия странички.
+
avatar
  • X3Shim
  • 18 мая 2020, 06:53
0
Я про то, что например, в гуглопачте стоит подтверждение кодом из СМС.
+
avatar
+1
Там есть такая фича — Application password. У меня gsm-модуль Sim5320 отлично коннектится к гуглоящику на котором включена двухфакторная аутентификация.
+
avatar
  • mib
  • 18 мая 2020, 06:56
+1
а когда в IMAP ввели двухфакторную?
+
avatar
  • X3Shim
  • 18 мая 2020, 07:00
-1
А я честно говоря даже не в курсе, при двухфакторной там еще imap (слово такое помню :) ) или нет. Но с некоторых пор у меня на всех аккаунтах оно включено.
+
avatar
0
А что делать если imap заблокирован настройками домена, например?
+
avatar
  • navyg
  • 18 мая 2020, 07:12
+9
Ага, или кому админ не разрешает подключения левых устройств. Или тем, у кого авторизация в сети через RADIUS.

Очевидно же, что устройство проектировалось для конкретного применения, без претензий на многофункциональность.

З.ы. а вот аккумуляторов не хватает и мелодичных звуковых оповещений — можно даже приятным женским голосом. ))
+
avatar
+1
Аккумуляторы вещь спорная, подведут в ответственный момент.
Женский голос вполне реализуемо, но мне не нужно :-)
+
avatar
0
пересылка автоматом туда, где разрешена.
+
avatar
0
Автор просто красавец — пять баллов ему. И просьба немного подробнее пояснить механизм забора почты. Это делается по IMAP с шифрованием соединения или как? Для любых ли почтовых сервисов это подходит и каким требованиям должен удовлетворять почтовый сервис чтобы это работало?
+
avatar
0
Честно говоря, я не знаю, с шифрованием или без. Я уже говорил, что в HTML я профан, сюда же можно приплюсовать все WEB, E-mail технологии.
Думаю, что на странице библиотеки, вы найдёте больше информации.
github.com/mobizt/ESP32-Mail-Client
+
avatar
0
У меня ящики на gmail и yandex — на этих сервисах работает.
+
avatar
  • yup2
  • 18 мая 2020, 08:36
+2
Это делается по IMAP с шифрованием соединения или как?
Даже без заглядывания в исходники понятно, что если у автора на GMail работает, то шифрование поддерживается.
+
avatar
  • yup2
  • 18 мая 2020, 09:29
+5
Заглянул в исходники.
просьба немного подробнее пояснить механизм забора почты
Там нет забора почты. Программа периодически спрашивает у сервера, сколько непрочитанных писем есть в Inbox. Если непрочитанные есть — сигналит лампочкой.
Для любых ли почтовых сервисов это подходит и каким требованиям должен удовлетворять почтовый сервис чтобы это работало?
Работает только по протоколу IMAP и только в шифрованном варианте (поскольку номер порта 993 прописан в исходнике). POP3 не поддерживается.
+
avatar
+1
Там нет забора почты. Программа периодически спрашивает у сервера, сколько непрочитанных писем есть в Inbox. Если непрочитанные есть — сигналит лампочкой.
Так мне и не нужно в информаторе держать письма. Но как я понял из примеров, письма таки читаются и хранятся в объекте IMAPData. Мне же нужно только количество непрочитанных писем: imapData.availableMessages()

POP3 не поддерживается.
Да, только imap
+
avatar
  • yup2
  • 18 мая 2020, 10:17
+2
Но как я понял из примеров, письма таки читаются и хранятся в объекте IMAPData.
Точнее — туда помещается ответ сервера. Но представьте, что пришло новое письмо с 10-мегабайтным вложением. Что, эта крохотулька его выкачивать будет?

Насколько я понял из описания использованной библиотеки, при строке критериев «UID SEARCH <чего-то-там>» с сервера будут запрошены только идентификаторы (UID) этого <чего-то-там>.
+
avatar
0
Проверим
+
avatar
0
POP3 не поддерживается.
Да, только imap
Не вижу тут никакой проблемы. POP3 тут неуместен вообще, насколько я помню по протоколу POP3 письма удаляются с сервера — здесь это категорически не нужно
+
avatar
  • navyg
  • 18 мая 2020, 23:40
+2
Вовсе необязательно им удаляться. Если вы не передаёте команду DELE, то сообщения с сервера никуда не денутся. Но клиентской части придётся разгребать сообщения: какие новые, какие старые. Особенно если сообщений очень много, это головняк. На IMAP же всё реализовано на уровне сервера: там есть различные флаги сообщений, в том числе флаг нового сообщения. И даже команда получения количества свежих писем.
+
avatar
+1
Но клиентской части придётся разгребать сообщения: какие новые, какие старые.
более аргументированное подтверждение, что POP3 для такой задачи не нужен.
+
avatar
  • navyg
  • 19 мая 2020, 08:23
+1
Это довольно устаревший протокол, который есть смысл поддерживать только в экзотических случаях. Как минимум, надо получать заголовки писем, смотреть дату и время и сравнивать их со временем последней проверки. Но флагов прочитанных сообщений на сервере POP3 нет в принципе, поэтому требуется или взаимодействие с человеком, чтобы он нажал кнопку на устройстве («ага, я увидел»), или сброс признака наличия новых сообщений по таймауту (но тогда человек может или пропустить мигание, или задолбаться на него смотреть), или ожидание их удаления с сервера (человек получил их через почтовый клиент и они удалились или переместились в папку, недоступную через POP3). Это всё реализуемо, но чуть сложней и менее удобно. Поэтому автор(ы) используемой в данном проекте библиотеки и автор самого проекта и пошли по более лёгкому и практичному пути.
+
avatar
  • yup2
  • 19 мая 2020, 20:02
0
Это довольно устаревший протокол, который есть смысл поддерживать только в экзотических случаях.
А у меня несколько ящиков на серверах, владельцы которых пишут: «IMAP нет и не планируется».
Ну, и то, о чём я ниже написал.
+
avatar
  • yup2
  • 19 мая 2020, 20:00
0
Но клиентской части придётся разгребать сообщения: какие новые, какие старые.
Не надо разгребать. Поступающему письму сервер присваивает номер. А чтобы получить новые письма (или информацию них) достаточно запросить те, у которых номер больше, чем у последнего старого.
Клиент у себя просто хранит номер этого последнего.
На IMAP же всё реализовано на уровне сервера
У IMAP есть фундаментальный недостаток: письма обязаны храниться на сервере. Невозможно сделать так, чтобы они осели на клиентской машине, а с сервера удалились.
+
avatar
  • navyg
  • 19 мая 2020, 20:50
0
Поступающему письму сервер присваивает номер. А чтобы получить новые письма (или информацию них) достаточно запросить те, у которых номер больше, чем у последнего старого.
Эээ… Уверены? Насколько я помню (лет двадцать назад писал в порядке эксперимента веб-интерфейс к почте, что-то мог и забыть), уникальный номер сообщению сервер не присваивает, просто тупо нумерует в текущей сессии находящиеся в ящике сообщения. А если там было 100 сообщений и человек удалил 10, потом пришло 5, устройству как понять, какие и сколько из них новые? Ещё есть такая штука, как уникальный идентификатор сообщения, но уникальность тоже может относиться только к текущей сессии, и это не порядковый номер, по нему не определить, какое сообщение следует за каким.
+
avatar
  • yup2
  • 19 мая 2020, 22:00
0
Уверены?
Да, я ошибся. (Тоже работал с POP3 лет двадцать назад.)
Это в NNTP можно запросить только сообщения, пришедшие после определённого. А в POP3 нужно хранить идентификаторы.
Ещё есть такая штука, как уникальный идентификатор сообщения, но уникальность тоже может относиться только к текущей сессии
Нет, стандарт явно требует, что UID каждого сообщения от сессии к сессии не менялся.
Иначе как можно было бы обеспечить поочерёдную работу с почтовым ящиком с разных мест? Ведь удаление хотя бы одного сообщения одной программой неизбежно ломало бы работу другой.
+
avatar
  • navyg
  • 19 мая 2020, 23:05
0
Нет, стандарт явно требует, что UID каждого сообщения от сессии к сессии не менялся.
Я сейчас бегло почитал RFC 1939, немного освежил память. Действительно, есть требование сохранение уникальности между сессиями. Но! Команда UIDL вообще описана в расширениях протокола и, следовательно, не обязана поддерживаться всеми серверами. )) Более того. Даже если и поддерживается конкретным сервером, нам от этого не сильно легче: надо где-то хранить идентификаторы всех писем ящика, чтобы отследить новые, поскольку RFC говорит, что идентификатор может состоять из 1...70 символов в диапазоне кодов 0х21...0х7е, но вообще никак не регламентирует алгоритм его формирования, так что всё зависит от фантазии программистов конкретного сервера и нельзя надеяться на то, что идентификаторы всё-таки будут следовать друг за другом по порядку. Заодно придётся поддерживать актуальность этого списка, выкидывая из списка идентификаторы удалённых пользователем сообщений. Ну и как понять без участия пользователя, какие письма он прочитал и какие нет, и вообще увидел ли мигание светодиодов? Занавес.

Не, это всё несложно реализовать, но делать такое на мелком устройстве — так себе удовольствие, особенно, если есть гораздо более удобный протокол IMAP.
+
avatar
  • yup2
  • 19 мая 2020, 23:43
0
Команда UIDL вообще описана в расширениях протокола и, следовательно, не обязана поддерживаться всеми серверами.
Не обязана. Но я работаю с почтой ещё с 90-х годов, и практически всегда у меня есть несколько ящиков, из которых письма автоматом при получении не удаляются — чтобы работать с этими письмами с разных машин. И ни разу не было случая, когда бы ручное удаление письма с одной машины рушило бы получение новых писем на других машинах.
POP3 ведь изначально делался с учётом возможности работы с нескольких точек — и не через telnet ;-) А без UIDL каждый новый сеанс все старые письма приходилось бы принимать заново.
надо где-то хранить идентификаторы всех писем ящика, чтобы отследить новые
На клиенте — да, надо.
но вообще никак не регламентирует алгоритм его формирования
Вот именно. И строго в рамках этого подхода можно было бы потребовать, чтобы идентификаторы шли в нарастающем порядке, и это резко упростило бы приём новых писем. В NNTP, например, сделано именно так, а ведь это одних лет протоколы.
Заодно придётся поддерживать актуальность этого списка, выкидывая из списка идентификаторы удалённых пользователем сообщений.
Список и сейчас приходится поддерживать. А удалять — желательно не на автомате, а по явно отдаваемой пользователем команде, чтобы удаление письма в одной программе не приводило к его исчезновению в другой.
Ну и как понять без участия пользователя, какие письма он прочитал и какие нет, и вообще увидел ли мигание светодиодов? Занавес.
А я не про это устройство говорю, а про работу с почтой нормальными клиентами.
+
avatar
  • Z2K
  • 19 мая 2020, 19:05
0
«Если непрочитанные есть — сигналит лампочкой.» — ого, у меня 9500 непрочитанных.
+
avatar
+1
Интересный и реализованный проект..-моё почтение, и, разумеется, плюс!
Выглядит очень презентабельно и информационно. Бросил в закладки.
+
avatar
+4
Круто, тоже переделывал старый нотифер купленный ещё на диалэкстриме под новый формат верификации у гугла, но у меня проще и на ардуине по компорту.

тут есть сам проект
+
avatar
+2
Да встречал проект по COM-порту. Но мне этот вариант не понравился. Так как требует включенного компьютера.
+
avatar
0
я «рабом лампы» быть еще не готов=)) хотя комп включен 24/7
+
avatar
  • sinobi
  • 18 мая 2020, 08:49
+1
Мне кажется для проекта бы хватило мощности ESP8266
+
avatar
+2
мне кажется для проекта хватило бы плагина в браузере)
+
avatar
+1
Возможно хватило бы, но под рукой был ESP32-PICO.
+
avatar
  • sav13
  • 18 мая 2020, 09:44
+6
Если бы он еще определял важные письма (например, из адресной книги) и неважные
А так получается оповещатель спама и уведомлений с форумов и соцсетей

Кстати, чем телефон не устраивает? Вполне себе уведомляет и настроек много
+
avatar
+4
Если бы он еще определял важные письма (например, из адресной книги) и неважные
А так получается оповещатель спама и уведомлений с форумов и соцсетей
Первую неделю отписывался от спама :-) Чистил ряды так сказать :-)
Кстати, чем телефон не устраивает?
Телефон не устраивает тем же чем и компьютер. Он бывает целыми днями валяется в куртке, в машине.
+
avatar
  • bm_s
  • 18 мая 2020, 09:57
-1
а в машине тоже такая лампочка?
+
avatar
-3
такая лампочка нужна в каждом помещении + должен быть хороший психиатр, ибо это указывает на явные признаки расстройства психического здоровья
+
avatar
  • bm_s
  • 18 мая 2020, 14:21
+1
На повышенную тревожность точно.
+
avatar
+2
может это для работы нужно?
+
avatar
  • bm_s
  • 18 мая 2020, 19:23
0
ну как-то живем без лампочек…
+
avatar
  • Nuts_
  • 25 мая 2020, 21:52
0
да и без 5g живём как то :)
+
avatar
  • bm_s
  • 26 мая 2020, 06:45
0
Чисто золушка…
+
avatar
0
Зачем вы где попало регаете свой ящик? Под форумы, соцсети и прочий спам можно отдельные ящики держать.
+
avatar
  • sav13
  • 19 мая 2020, 10:53
0
Тут кто как привык
Кому удобно 10 ящиков, кому удобно 1
+
avatar
  • Na4Fin
  • 18 мая 2020, 09:59
0
Товарищи, против DIY ничего не имею, это прекрасно. Но не кажется ли, что жизнь с такими предметами становится похожей на жизнь собачки Павлова? Лампочка загорелась = слюнки потекли (ящик засветился = бежать к компу).
Чисто моё мнение. Извините, если кого задело.
+
avatar
+4
но рабочую почту пропускать тоже не приятно, вопрос комфорта
+
avatar
+2
Никого не задело. Со смартфонами, мы все в той или иной степени собачки Павлова.
+
avatar
0
В зависимости от того, как применять устройство. Для работы и рабочей почты отдельная лампочка удобнее, чем переключать в браузере закладки для проверки почты (особенно когда «услужливые» браузеры выгружают закладку из памяти, чтобы ресурсы не кушала, а то ты целых 10 минут её не посещал, а значит и ни каких обновлений её заголовка нет — только переключать ручками на неё периодически).
+
avatar
  • Nuts_
  • 25 мая 2020, 22:04
0
между прочим есть такая работа у людей точнее часть работы, за которую к тому же деньги платят.
вот иногда ждёшь ждёшь _важное_ письмо по работе, сидишь проверяешь почту перед компом, никуда не идёшь — как раз напоминаею сам себе дрессипованную обезьянку.
что характерно, если отвлечешься другим да забудешь проверить — окажеться что письмо давно прислали, но вечером по нему работать уже поздно, а завтра другие срочные дела… в результате рабочий вопрос перемещается а целый день… это неприятно.
с нынешней ситуацией когда то никто не пишет то появляется толпа клиентов и всем что-то срочно.
но единственное для этого не надо такой девайс просто телефон посту проверяет регулярно, а когда он пискнет — да бежишь отвечать. ну точнее по телефону посмотреть что не спам можно, и это только с рабочей почтой такой режим.
+
avatar
+7
Статье плюс.
Я себе такой сделал (фото не моё, лень в кабинет идти):



Если интересно, вот ссылка на Вещьленную — www.thingiverse.com/thing:3057483
+
avatar
0
Так там всё для принтера, а прошивка и схема? Понятно лишь, что esp8266 и «адафруит»
+
avatar
0
Там должна быть пошаговая инструкция в описании.
+
avatar
0
Нашлось довольно далеко:
learn.adafruit.com/gmailbox
+
avatar
0
Вторая ссылка в описании со словами «Learn Guide» это далеко?
+
avatar
  • kirich
  • 18 мая 2020, 10:32
+3
Везет, у меня как-то в последние несколько лет в день порядка 100-200 писем, соответственно даже если зайти проверить почту хотя бы раз в 10 минут, то там почти наверняка что-то будет.

Но вообще вещь действительно любопытная, хотя почтовый ящик показанный выше смотрится более эффектно :)
+
avatar
  • ewavr
  • 18 мая 2020, 18:47
0
Наверное, несложно сделать, чтобы лампочка загоралась при получении 100 писем. Или цифровой индикатор приделать.
+
avatar
0
Проще сделать фильтры важное/неважное и только по важным включать алЯрм.
+
avatar
  • nomido
  • 18 мая 2020, 10:39
+3
завидую тем, кто может себе позволить такой девайс, у меня 10 ящиков, из них 4 нужно регулярно читать/разбирать. понятно что там 90% мусор и нотификации, но его нельзя просто удалить, и сейчас там 46 + 1106 + 447 + 209 непрочитанных сообщений :(
и это после того как явный спам удален.
+
avatar
  • bm_s
  • 18 мая 2020, 17:55
+1
у меня 10 ящиков
на кой? Вспомнилась цитата из бессмертного произведения: у меня тридцать баб, и одна чище другой.
+
avatar
  • nomido
  • 19 мая 2020, 14:33
+1
разные проекты, свой ящик под каждый + отдельно 2 ящика для жизни 1 для друзей и знакомых 2 для регистрации на али, муське и т.д.
+
avatar
  • bm_s
  • 19 мая 2020, 15:30
+1
Экий вы деловитый
+
avatar
0
1. Агрегацию почты настроить (с нескольких ящиков в один собирать).
2. При таком количестве непрочитанных и «нужно регулярно читать/разбирать», вам этот девайс ещё не скоро пригодится. :D
+
avatar
  • nomido
  • 19 мая 2020, 14:41
0
1) много ящиков как раз чтобы разделить разные потоки, потому что приоритеты на разные проекты все время меняются, и разбирать можно частями согласно приоритетов.

2) я про то и писал, что клевая штука, но есть момент. это как я себе браслет купил, чтобы месаги в телеге не пропускать, толку мало оказалось, хорошо архив сделали ибо там 27к сообщений из разных каналов, которые я точно никогда не прочитаю. только поиском когда нить, может быть.
+
avatar
  • yup2
  • 19 мая 2020, 20:08
0
Агрегацию почты настроить (с нескольких ящиков в один собирать).
Письма не только читают, на них ещё и отвечать приходится. А когда они собраны с разных ящиков в один — отвечать становится гораздо менее удобно.
+
avatar
+1
Завидую тем людям у которых один ящик и непрочитанных писем нет. Я хлам разбираю наскоками на телефоне, пока время есть свободное. И вроде от всякого спама постоянно отписываюсь только не помогает все это. Одно время стоял информер софтовый на компе и телефоне, снес нафиг. У меня и в телефоне звук только по белому списку (записная) на основной симке, на дополнительной все без звука.
+
avatar
+1
Аналогичная ситуация. Раньше то же делал всякие нотификаторы, но на почту летит спам, и всякие рассылки из магазинов, мне проще эпизодически заглядывать, вычищать пару десятков писем…
+
avatar
  • bm_s
  • 18 мая 2020, 17:57
0
Завидую тем людям у которых один ящик
есть такая полезная настройка. Переадресация называется.
+
avatar
0
А зачем мне всякая хрень с банковского мыла, регистрационного мыла, второго регистрационного мыла, личного мыла в моем рабочем ящике? Я только рабочий и банковский чищу, остальные даже не пытаюсь. У меня на банковский ящик умудряется спам пролезать, хотя он нигде не светится, кроме банков и налоговой.
+
avatar
  • bm_s
  • 18 мая 2020, 19:26
0
а лампочка для регистрационного мыла, типа, нужна? Ну ладно, чо…
+
avatar
+1
Кот смотрит очень скептически.
+
avatar
0
При наличии 3Д принтера лепить конроллер на сопликлей? Однако!