На этой странице представлен один из способов пересылки сообщений из электронной почты в мессенджер Telegram. Такое оповещение необходимо для администраторов сетей в тех случаях, когда нет круглосуточных дежурных на мониторинге и необходимо оперативно получать информацию о возникающих событиях.
Принцип действия следующий. В системе мониторинга (Zabbix. Dude, Siem и тп) настраивается электронная почта, на которую отправляются сообщения в случае возникновения определенных заданных событий. Например перестал идти ping до сервера. В роли почтового клиента, который опрашивает почтовый сервис каждую минуту выступает скрипт на виртуальной машине Linux. Скрипт пересылает сообщение в Telegram-бота по его токену на его id или id группы.

Такой способ не требует собственного почтого сервера и открытых портов, что критично в последнее время особенно для гос. организаций.
Telegram-бот.
Активируем и настроим собственного Telegram-бота.
Предварительно в смартфоне IT-отдела установлен, настроен и работает мессенджер Telegram.
Скачиваем и устанавливаем клиент Telegram на рабочий ПК Windows администратора. Активируем, входим в него.
Находим через поиск BotFather.
BotFather – это официальный «главный бот» в Telegram, который служит инструментом администратора для создания и управления другими ботами. Он выдает API Token (уникальный ключ) для подключения бота к коду, меняет имя, описание, аватар и команды бота, позволяет удалять ботов и тп.
Подробнее про ботов можно почитать тут.
Нажимаем кнопку START.
или отправляем команду
|
1 |
/start |
В ответ придет список команд.
Создаем нового бота. Вводим команду:
|
1 |
/newbot |

Вводим любое логически понятное название бота.
|
1 |
my_monitoring_bot |
Вводим имя бота. (то, как к нему будет обращаться приложение)
|
1 |
pc360_events_bot |

В ответ придет TOKEN, например:
|
1 |
7234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw |
Сохраняем его в текстовый файл.
Токен нужно хранить в безопасном месте, так как им может воспользоваться любой желающий для управления вашим ботом.
Вставляем токен в браузер в виде команды для проверки.
|
1 |
https://api.telegram.org/bot7234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw/getUpdates |

|
1 |
"ok":true |
Запрос успешно обработан, бот работает и токен правильный.
|
1 |
"result":[] |
На данный момент у бота нет новых событий, о которых можно было бы сообщить.
Переходим в нашего созданного бота по ссылке из сообщения BotFather.
Нажимаем START.
Пишем в бот-чат любое сообщение и еще раз проверяем вывод в браузере.
В выводе находим id чата.
|
1 2 |
"chat": { "id": 1234567890} |
Сохраняем его в текстовый файл.
Проверяем отправку из браузера в чат по id. Вставляем в конце команды id и текст сообщения.
|
1 |
https://api.telegram.org/bot7234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw/sendMessage?chat_id=1234567890&text=Hello |
В бота придет отправленное сообщение Hello.
Не обязательное действие – бота можно настроить.
Команда просмотра ботов в BotFather.
|
1 |
/mybots |
Если кликнуть на бота, откроется меню настроек.
Электронная почта пересылки.
Создаем электронную почту yandex, которая будет пересылать сообщения из систем мониторинга в Telegram-бота. Скрипт рассчитан для почты yandex.
Например:
|
1 |
resender@yandex.ru |
Создаем пароль приложения в почте.
Например:
|
1 |
qwertyuiopasdfgh |
Разрешаем доступ к почтовому ящику для сторонних программ.
Яндекс почта >> Настройки >> Все настройки >> Почтовые программы

Электронная почта мониторинга.
Эта почта уже существует и присылает сообщения из систем мониторинга. Если её нет – создаем и указываем в системах мониторинга (zabbix, dude, siem и тп).
Например:
|
1 |
monitoring@yandex.ru |
Пересыльщик почты.
Использован скрипт email-to-telegram-bot с github.
Скрипт работает из Linux. Следовательно, необходимо создать виртуальную машину и установить на нее Linux (например, Ubuntu), затем настроить скрипт.
Создание ВМ.
Минимальны системные требования.
CPU: 2 ядра.
ОЗУ динамическая: мин. 2Гб, макс 4Гб.
Системный диск: 100Гб, динамический.
Размер диска 100Гб это сильный перебор, но уже стандарт в основном для любых ВМ. Сообщения не хранятся локально, скрипт работает через IMAP.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Пример создания для Hyper-V. # Создание ВМ с именем EMAIL-RESENDER, 2-поколения, ОЗУ 4Гб, SYSTEM DRIVE 100Гб. New-VM -Name "EMAIL-RESENDER" -Path D:\HYPER-V -Generation 2 -MemoryStartupBytes 4GB -NewVHDPath "D:\HYPER-V\EMAIL-RESENDER\Virtual Hard Disks\SYSTEM.vhdx" -NewVHDSizeBytes 100GB # Подключение виртуального дисковода и ISO образа. Add-VMDvdDrive -VMName EMAIL-RESENDER -Path D:\ISO\ubuntu-22.04.5-live-server-amd64.iso # Отключение безопасной загрузки. Set-VMFirmware "EMAIL-RESENDER" -EnableSecureBoot Off # Назначим переменные для порядка загрузки и первым поставим виртуальный дисковод $LAN = Get-VMNetworkAdapter -VMName EMAIL-RESENDER $HDD = Get-VMHardDiskDrive -VMName EMAIL-RESENDER $DVD = Get-VMDvdDrive -VMName EMAIL-RESENDER Set-VMFirmware -VMName EMAIL-RESENDER -BootOrder $DVD, $HDD, $LAN # Установка 2 ядер для виртуального процессора. Set-VMProcessor EMAIL-RESENDER -Count 2 # Активация и настройка динамической памяти (мин 2Гб макс 4Гб, стартовая 2Гб) Set-VMMemory EMAIL-RESENDER -DynamicMemoryEnabled $True -MaximumBytes 4GB -MinimumBytes 2GB -StartupBytes 2GB #Подключение (создание) виртуального сетевого адаптера к ВМ и выбор для него созданного коммутатора. Add-VMNetworkAdapter -VMName EMAIL-RESENDER -Name "VIRTUAL-ETHER1" -SwitchName "vSW-SFP+" #Название сетевого адаптера и виртуального коммутатора у каждого свои. |
Установка Ubuntu.
Использован Ubuntu Server 22 без графического интерфейса.
В процессе мастера установки отмечаем установку ssh-сервера, ip-адрес по DHCP. Всё остальное без изменений. Далее >> Далее >> Готово.
После установки подключаемся по ssh любым удобным клиентом на ip-адрес сервера.
Подготавливаем сервер.
Входим с правами root
|
1 |
sudo -i |
(пароль)
Обновляем список пакетов.
|
1 |
apt update |
Устанавливаем интерпретатор Python 3 и менеджер пакетов pip.
|
1 |
apt install python3 python3-pip -y |
Библиотека, необходимая для работы.
|
1 |
pip3 install pyTelegramBotAPI |
В дополнение можно установить библиотеку requests для Python, которая упрощает HTTP-запросы.
|
1 |
pip3 install requests |
В оригинальном скрипте нет requests но если планируется доработка, то лучше сразу установить.
Настройка скрипта.
Скачиваем проект.
|
1 |
git clone https://github.com/Crowmen007/email-to-telegram-bot.git |
Переходим в папку.
|
1 |
cd email-to-telegram-bot |
Редактируем конфигурацию скрипта.
|
1 |
nano YandexBot.py |
Настраиваем скрипт под свои почты и токен.
|
1 2 3 4 |
TELEGRAM_BOT_TOKEN = "7234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw" YANDEX_EMAIL = "resender@yandex.ru" YANDEX_PASSWORD = "qwertyuiopasdfgh" TARGET_EMAIL = "monitoring@yandex.ru" |

YANDEX_EMAIL – почта по пересылке писем.
TARGET_EMAIL – почта в системах мониторинга (откуда приходят оповещения).
Скрипт фильтрует входящие письма по email источника.
Далее находим строку и указываем в ней свой чат id.
|
1 |
bot.send_message(1234567890, email_info) |
![]()
Сохраняем, закрываем.
|
1 2 |
ctrl+x yes |
Просмотр выполнения скрипта в терминале.
|
1 |
python3 YandexBot.py |

Если появляются ошибки – устраняем.
Процесс завершится если закрыть терминал. Чтоб процесс выполнения скрипта продолжался постоянно, нужно создать службу, которая будет за этим процессом следить. Альтернативный вариант – запускать скрипт по расписанию cron.
Вариант со службой.
Создаем сервис.
|
1 |
nano /etc/systemd/system/yandexbot.service |
Вставляем конфиг.
|
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description=Yandex Email to Telegram Bot After=network.target [Service] ExecStart=/usr/bin/python3 /root/email-to-telegram-bot/YandexBot.py Restart=always User=root [Install] WantedBy=multi-user.target |
Активируем.
Перечитываем все .service файлы с диска, чтоб systemd узнал про новую службу yandexbot.service.
|
1 |
systemctl daemon-reload |
Включаем автозапуск при старте системы.
|
1 |
systemctl enable yandexbot |
Запускаем сервис.
|
1 |
systemctl start yandexbot |
Это эквивалентно запуску python3 YandexBot.py в ssh-терминала, но запускается в фоне и под контролем systemd.
Если нужно отслеживать логи выполнения скрипта в терминале, то сперва необходимо остановить службу. Два этих процесса вместе создадут ошибку.
Проверка статуса.
|
1 |
systemctl status yandexbot |
Должно быть.
|
1 |
Active: active (running) |
Проверка.
Создаем событие на сетевом оборудовании, которое под наблюдением системы мониторинга. Событие приходит на email resender@yandex.ru.

Через 1мин событие приходит в телеграм-бот.
Группа в Telegram.
Если в отделе несколько админов и им всем нужно видеть информационные события, решается это через группы.
Создаем группу в основном профиле Telegram.
Указываем понятное название.
Добавляем в эту группу созданного ранее бота и админов.
У бота через BotFather отключаем приватность группы, чтоб он имел доступ к сообщениям. Можно назначить бота админом в группе.
Пишем любое сообщение в группе.
Находим id чата группы через запрос из браузера.
|
1 |
https://api.telegram.org/bot7234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw/getUpdates |

id чата группы обычно с минусом.
Меняем id в скрипте.
|
1 |
nano /root/email-to-telegram-bot/YandexBot.py |
Сохраняем.
|
1 2 |
ctrl+x yes |
Проверяем.
Создаем событие. Оповещение приходит в группу.
Группа может в итоге стать супергруппой по разным причинам и её id изменится. Оповещение перестанет работать. В этом случае нужно найти новый id супергруппы, который обычно начинается с -100 и заменить id в скрипте.
Масштабирование.
Если возникла необходимость получать сообщения с другого email и пересылать их в другую группу, то реализовать это можно несколькими способами. Самый простой и независимый – настроить еще один скрипт. Среди других вариантов можно изменить код скрипта, указав несколько аккаунтов email или настроить маршрутизацию email.
Скопируем настроенный ранее скрипт изменив его название.
Все другие действия аналогичны. Создаем бота, email, создаем группу, добавляем бота в группу, находим id, проверяем.
Переходим к скрипту.
|
1 |
cd email-to-telegram-bot |
Копируем.
|
1 |
cp YandexBot.py YandexBot2.py |
Проверяем содержание папки.
|
1 |
ls -la |
Меняем параметры во втором скрипте.
|
1 |
nano YandexBot2.py |
или из корня
|
1 |
nano /root/email-to-telegram-bot/YandexBot2.py |
Указываем новый токен, email, id бота или группы.
Сохраняем.
Создаем вторую службу.
|
1 |
nano /etc/systemd/system/yandexbot2.service |
|
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description=Yandex Email to Telegram Bot 2 After=network.target [Service] ExecStart=/usr/bin/python3 /root/email-to-telegram-bot/YandexBot2.py Restart=always User=root [Install] WantedBy=multi-user.target |
Запускаем.
|
1 |
systemctl daemon-reload |
|
1 |
systemctl enable yandexbot2 |
|
1 |
systemctl start yandexbot2 |
Проверка статуса.
|
1 |
systemctl status yandexbot2 |
Если возникает конфликт и ошибка 409, то необходимо закомментировать строку в одном или в обоих скриптах.
|
1 |
bot.polling(none_stop=True) |
Это можно делать только если бот не интерактивный, не требуется обратная связь с него, как в данном случае.