Почта для домена в Telegram

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

@olku
17.04.2022 17:02 UTC
Первоисточник

Комментарии

@FanatPHP
18.04.2022 04:52 UTC
+4

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


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


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


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

@olku
18.04.2022 07:31 UTC
0

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

18.04.2022 07:41 UTC
0

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


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

28.04.2022 17:18 UTC
+1

Аттачи завезли, размерами до memory limit.

@bergamot
10.06.2022 04:40 UTC
+1

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

Написал статью в ответ: https://blog.buryi.de/2022/06/khranenie-i-bekap-elektronnoi-pochty/

10.06.2022 09:20 UTC
0
Спасибо за статью, но с момента написания она немного устарела. В ней надо написать, как настраивать Oauth в Thunderbird, без которого ничего работать не будет…
10.06.2022 12:32 UTC
+1

Перекомпоновал предложение про OAuth, чтобы не смущало. Thunderbird отлично работает с OAuth. Инструкция: коротко - вводишь свой емейл и жмешь кнопки в диалогах.

Длинно: добавляешь аккаунт, вводишь свой email@gmail.com. Продолжаешь без пароля. Открывается окно логина в Google с заполненным емейлом, далее, вводишь пароль, показывается окно разрешения Thunderbird к почте от гугла. Разрешаешь и все работает, сейчас проверил с нуля и через POP, и через IMAP.

Для бэкапов советую IMAP, если всё разложено по папкам.

10.06.2022 16:38 UTC
0
Вот спасибо!
Я как раз пробовал недавно Тундру подключить, но что-то пошло не так, и я забросил.
Попробую снова.
@savostin
18.04.2022 12:21 UTC
0

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

@FanatPHP
18.04.2022 12:34 UTC
0

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

18.04.2022 13:09 UTC
0

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

18.04.2022 13:11 UTC
0

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

18.04.2022 13:45 UTC
0

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

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

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

@LAG_LAGbI4
18.04.2022 12:46 UTC
+1

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

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

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

@pavelpromin
20.04.2022 07:07 UTC
+2

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

@Franky4F
22.06.2026 09:57 UTC
0

Сейчас этот слой закрывает Cloudflare Email Routing: бесплатный catch-all на домен, MX проставляется автоматически, а входящее письмо можно гнать не в пересылку, а прямо в Worker (email() handler). Связка SendGrid → хост с контроллером → Telegram схлопывается в Email Routing → Worker → Telegram — без своего хоста и без стороннего парс-провайдера. Inbound-only, но тут задача ровно такая.

Собрал на этом стеке disposable-почту с вытаскиванием OTP, можно пощупать живьём: @GotEmailbot (исходники открыты). Сценарий другой — одноразовые ящики, не доменная почта, — но «приёмник» теперь именно Worker, а не внешний Inbound Parse.