Дважды начинал эту заметку ибо откровений и контента мало. Решая личную проблему переезда входящей почты с Yandex 360, оказалось, что бесплатных парковок "на западе" не имеется. Zoho как альтернатива, определенно, хорош, но 90 центов за домен в месяц для десятка доменов с сотней текстовых входящих показалось избыточным. На коленке был собран wizard, связывающий SendGrid и Telegram вместе.
Компоненты
Среди найденных почтовых сервисов, предлагающих Inbound Parse - SendInBlue, MailChimp, MailGun и SendGrid - быстрее всего получилось с SendGrid, хотя для хобби-проектов предпочитаю первый. SendInBlue предлагают весьма широкий бесплатный план до 300 емейлов в сутки и не докучают рекламой. Но вот с их Inbound не срослось. Возможно, что-то недочитал или недонастроил.
Telegram Bot API прекрасен и прост как валенок. Создать нового бота и добавить ему wеbhook - дело нескольких минут. Ранее уже имелся чат для алертов и всяких системных сообщений. Поэтому, все что было нужно - это конвертировать JSON от SendGrid в сообщение, понятное Telegram. Вложения не ожидались, поэтому их обработка была отложена навсегда.
Третий ингредиент - домен. На него SendGrid будет пересылать входящие, а Telegram - ответы на сообщения и команды от бота. Подойдет любой хост доступный публично, но за прекрасный Viaduc de Millau отдать 3 евро в зоне OVH было не жалко.
Wizard
На первом шаге мастер просит указать идентификатор чата или группы Telegram. Идентификатор в клиенте не виден, но бот любезно его сообщит по команде /i
. Наличие в чате бота проверяется перед следующим шагом.
На втором шаге мастер просит создать пять записей в DNS зоне. Четыре из них для интеграции с SendGrid, и одна для хранения идентификатора чата. Он на всякий случай шифруется. После добавления записей некоторое время придется подождать. В принципе, на этом шаге настройка закончена.
Третий шаг помогает убедиться, что все работает. Тестовое текстовое сообщение отсылается в SendGrid по API, затем парсится и отсылается на хост в контроллер, который передает его дальше в чат Telegram. Настройка Inbound Parse не выполняет фильтрацию спама, поэтому входящие должны поступать отовсюду.
Все компоненты смешаны на умирающем PHP и выложены на GitHub. Как явапоклонник, предпочитаю прототипировать в Symfony. При всех равных, MVC c Bootstrap в Symfony создается быстрее чем с Thymeleaf раза в два. Конструктивная критика приветствуется. Happy coding!
Комментарии (12)
savostin
18.04.2022 15:21Так и не понял из статьи принцип действия этого комбайна. Откуда появится почта для домена?
FanatPHP
18.04.2022 15:34SendGrid. В MX домена указывается сервер SendGrid, соответственно все письма приходят на него, и перекидываются на твой вебхук.
Из минусов, как я понял — фактически будет один адрес на домен. Хотя могу ошибатьсяsavostin
18.04.2022 16:45Вот теперь понятнее ;)
Входящие - wildcard. Раскидывать по адресам нужно самим скриптом.
Исходящие - зависит уже от SMTP сервера.
LAG_LAGbI4
18.04.2022 15:46+1Я дико извиняюсь, но я ничего не понял. Смотреть почту через телеграм? но зачем?
FanatPHP
18.04.2022 16:10- Это почта для домена, то есть адрес не vasya30575993@yandex.ru, а vvs@mydomain.com
- Удобство. Лично я, например, с удовольствием избавлюсь от почтового клиента, и буду смотреть и форвардить почту прямо в телеге.
olku Автор
18.04.2022 16:15В первом абзаце описание проблемы, весьма специфической. Такое почти никому не нужно. Но если поможет хотя бы двоим, значит не зря.
FanatPHP
Мужчина, это так круто, что у меня нет слов.
Уже давно прошли времена, когда публикация на Хабре могла бы меня удивить, но вам это удалось. Идея настолько же проста, насколько и гениальна! Мы одним махом избавляемся и от больших братьев типа Гугла и Яндекса, и от допотопных емейл-клиентов!
Я почему-то никогда не рассматривал рассылочные API как брокеры входящих сообщений, но ведь действительно — никто не мешает задействовать их в таком режиме. Ну и бридж в телегу вместо тяжеловесных почтовых клиентов — это то что доктор прописал.
Одна проблема — куда девать всё нажитое непосильным трудом, почтовый архив за 10 лет. Не сказать чтобы там было что-то важное, но чисто из ностальгических соображений.
Видимо, всё-таки придется оставить текущую почту на Яндексе и вдохновившись идеей, прикрутить телеграм уже к ней. А вот новую, когда понадобится, заведу точно через SendGrid.
olku Автор
Верно, применимость ограничена клиентом - ответить и забыть. Но мост можно построить и в другие приложения потолще, поэтому, отдал в опенсорс хакать.
FanatPHP
Ну в моём случае ответ требуется писать на одно письмо из ста.
Личный емейл у меня давно уже превратился в средство общения с роботами. Люди на него пишут крайне редко.
Вот что пригодилось бы — это работа с аттачментами. Вряд ли соберусь, но если все-таки воспользуюсь, то допилю что-нибудь типа если картинка, и меньше определенного размера, то сразу в чат, а остальное — только роботом запрашивать.