Дважды начинал эту заметку ибо откровений и контента мало. Решая личную проблему переезда входящей почты с 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)


  1. FanatPHP
    18.04.2022 07:52
    +3

    Мужчина, это так круто, что у меня нет слов.


    Уже давно прошли времена, когда публикация на Хабре могла бы меня удивить, но вам это удалось. Идея настолько же проста, насколько и гениальна! Мы одним махом избавляемся и от больших братьев типа Гугла и Яндекса, и от допотопных емейл-клиентов!


    Я почему-то никогда не рассматривал рассылочные API как брокеры входящих сообщений, но ведь действительно — никто не мешает задействовать их в таком режиме. Ну и бридж в телегу вместо тяжеловесных почтовых клиентов — это то что доктор прописал.


    Одна проблема — куда девать всё нажитое непосильным трудом, почтовый архив за 10 лет. Не сказать чтобы там было что-то важное, но чисто из ностальгических соображений.
    Видимо, всё-таки придется оставить текущую почту на Яндексе и вдохновившись идеей, прикрутить телеграм уже к ней. А вот новую, когда понадобится, заведу точно через SendGrid.


    1. olku Автор
      18.04.2022 10:31

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


      1. FanatPHP
        18.04.2022 10:41

        Ну в моём случае ответ требуется писать на одно письмо из ста.
        Личный емейл у меня давно уже превратился в средство общения с роботами. Люди на него пишут крайне редко.


        Вот что пригодилось бы — это работа с аттачментами. Вряд ли соберусь, но если все-таки воспользуюсь, то допилю что-нибудь типа если картинка, и меньше определенного размера, то сразу в чат, а остальное — только роботом запрашивать.


  1. savostin
    18.04.2022 15:21

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


    1. FanatPHP
      18.04.2022 15:34

      SendGrid. В MX домена указывается сервер SendGrid, соответственно все письма приходят на него, и перекидываются на твой вебхук.
      Из минусов, как я понял — фактически будет один адрес на домен. Хотя могу ошибаться


      1. olku Автор
        18.04.2022 16:09

        Любой адрес домена. Виден в сообщении в поле To. Есть демка, играйтесь.


        1. FanatPHP
          18.04.2022 16:11

          Не, это-то понятно, что он зонтик. А с исходящим как?


      1. savostin
        18.04.2022 16:45

        Вот теперь понятнее ;)

        Входящие - wildcard. Раскидывать по адресам нужно самим скриптом.

        Исходящие - зависит уже от SMTP сервера.


  1. LAG_LAGbI4
    18.04.2022 15:46
    +1

    Я дико извиняюсь, но я ничего не понял. Смотреть почту через телеграм? но зачем?


    1. FanatPHP
      18.04.2022 16:10

      1. Это почта для домена, то есть адрес не vasya30575993@yandex.ru, а vvs@mydomain.com
      2. Удобство. Лично я, например, с удовольствием избавлюсь от почтового клиента, и буду смотреть и форвардить почту прямо в телеге.


    1. olku Автор
      18.04.2022 16:15

      В первом абзаце описание проблемы, весьма специфической. Такое почти никому не нужно. Но если поможет хотя бы двоим, значит не зря.


  1. pavelpromin
    20.04.2022 10:07
    +1

    Годная тема. Спасибо, не знал что так можно.