
Chi gestisce un server di posta sa bene quanto sia importante non perdere mai un allarme o una notifica di sistema.
Spesso gli alert vengono inviati via email ma quando si parla di monitoraggio in tempo reale, le email non bastano più: rischiano di passare inosservate o di finire sepolte in una casella piena.
In questo articolo vedremo come integrare Postfix con Telegram su Ubuntu Server 24.04, in modo da ricevere direttamente sullo smartphone tramite un bot dedicato tutti i messaggi e gli allarmi generati dal mail server o dai dispositivi che lo utilizzano come smarthost.
La soluzione è semplice, leggera e completamente autonoma: non richiede software esterni né servizi cloud aggiuntivi, ma sfrutta le funzionalità già presenti in Postfix (alias e sender_bcc_maps) insieme alle API ufficiali di Telegram.
Al termine della guida avrai un sistema capace di:
- intercettare le email di allarme inviate tramite Postfix;
- inoltrarle automaticamente su un canale o gruppo Telegram;
- notificarti in tempo reale eventuali problemi di rete, backup o monitoraggio.
Un modo pratico per trasformare il tuo server di posta in un centro di allerta sempre in tasca, utile per sysadmin, devops e chiunque voglia avere sotto controllo lo stato della propria infrastruttura.
PREREQUISITI
Installazione del Mail Server Postfix su Ubuntu Server 16.04
CONFIGURAZIONE DI TELEGRAM
La prima cosa da fare è creare il bot con BotFather
Aprire Telegram o tramite app o via web quindi cercare l’utente @BotFather.
Selezionare @BotFather. Dovremmo visualizzare una schermata come quella sovrastante
Scrivere /start
Eseguire il comando /newbot
Inserire un nome da dare al Bot (es. Allarmi Rete)
Sceglire uno username univoco che termini con _bot (es. allarmi_rete_bot)
Se l’username non esiste il Bot BotFather dovrebbe rispondere qualcosa tipo:
Done! Congratulations on your new bot. You will find it at t.me/allarmi_rete_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you’ve finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
123456789:AAAbbbCCCdddEEEfffGGGhhhIIIjjj
Keep your token secure and store it safely, it can be used by anyone to control your bot.
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Segnarsi il Token perchè lo utilizzeremo tra poco…
Per impostare un immagine al Bot appena creato digitare /setuserpic quindi cliccare sulla graffetta per caricare l’immagine
Verificare che l’immagine sia OK quindi cliccare Send
Se la foto è stata caricata con successo dovremmo visualizzare il messaggio:
Success! Profile photo updated. /help
A questo punto è arrivato il momento di ottenere il tuo chat_id
Cercare la chat con il bot che hai appena creato. (es. allarmi_rete_bot)
Premere Start o scrivere un messaggio qualunque (es. ciao), così c’è almeno un update.
Dovremmo visualizzare una schermata come quella sovrastante
A questo punto creare un gruppo su Telegram cliccando su New Group
Inserire il nome da dare al gruppo quindi cliccare Next
Cliccare Create
Cliccare sui tre pallini indicati dalla freccia
Seelzionare Manage Group
Selezionare Members
Cercare e Selezionare il bot creare poco fa quindi cliccare Add
Dovremmo visualizzare due utenti nel gruppo come mostrato nell’immagine sovrstante
Collegarsi al server Ubuntu dove gira Postfix e assicurarsi di avere curl installato.
|
0
1
|
sudo apt update
sudo apt install -y curl
|
Lanciare questo comando (sostituire il TOKEN 123456789:AAAbbbCCCdddEEEfffGGGhhhIIIjjj):
|
0 |
curl "https://api.telegram.org/bot123456789:AAAbbbCCCdddEEEfffGGGhhhIIIjjj/getUpdates"
|
Dovremmo visualizzare un output simile al seguente:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
{
"ok": true,
"result": [
{
"update_id": 123456789,
"message": {
"message_id": 1,
"from": {
"id": 987654321,
"is_bot": false,
"first_name": "Mario"
},
"chat": {
"id": 987654321,
"first_name": "Mario",
"type": "private"
},
"date": 1731086400,
"text": "ciao"
}
}
]
}
|
Nell’output JSON cercare una parte tipo:
|
0 |
"chat":{"id":123456789,"first_name":"...","type":"private"}
|
Il numero al posto di 123456789 è il tuo CHAT_ID personale.
Per verificare che token e chat_id funzionano eseguire il comando seguente:
|
0
1
2
3
4
5
6
|
TOKEN="123456789:AAAbbbCCCdddEEEfffGGGhhhIIIjjj"
CHAT_ID="123456789"
curl -s \
--data-urlencode "chat_id=$CHAT_ID" \
--data-urlencode "text=Test allarme da Postfix su Ubuntu 24.04" \
"https://api.telegram.org/bot$TOKEN/sendMessage"
|
Se si riceve il messaggio su Telegram è tutto configurato correttamante.
CONFIGURAZIONE DI POSTIFIX SU UBUNTU
Procedere con la creazione dello script che invia le mail a Telegram.
Creare uno script che Postfix potrà chiamare ogni volta che vogliamo duplicare una mail su Telegram.
Creare il file:
|
0 |
sudo nano /usr/local/bin/mail2telegram.sh
|
Inserire il seguente contenuto:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#!/bin/bash
# === CONFIGURARE QUI ===
TOKEN="123456789:AAAbbbCCCdddEEEfffGGGhhhIIIjjj"
CHAT_ID="-1001234567890" # ID chat/gruppo (può essere negativo)
# =====================
# Legge l'intera email da stdin
MAIL="$(cat)"
# Estrae Subject e From dalle intestazioni
SUBJECT=$(printf '%s\n' "$MAIL" | grep -m1 "^Subject:" | cut -d' ' -f2-)
FROM=$(printf '%s\n' "$MAIL" | grep -m1 "^From:" | cut -d' ' -f2-)
# Corpo dell'email (dopo la prima riga vuota), limitato a 20 righe
BODY=$(printf '%s\n' "$MAIL" | sed -n '/^$/,$p' | head -n 20)
TEXT=" Allarme Postfix (smarthost)
From: $FROM
Subject: $SUBJECT
$BODY"
curl -s \
--data-urlencode "chat_id=$CHAT_ID" \
--data-urlencode "text=$TEXT" \
"https://api.telegram.org/bot$TOKEN/sendMessage" >/dev/null 2>&1
|
Salvare e chiudere il file di configurazione
ATTENZIONE: sostituire il TOKEN e la CHAT_ID
NOTA BENE: head -n 20 serve a non mandare messaggi troppo lunghi su Telegram. E’ possibile alzare e/o abbassare il numero se lo si ritiene opportuno.
Rendere lo script eseguibile con il comando:
|
0 |
sudo chmod +x /usr/local/bin/mail2telegram.sh
|
A questo punto creare un finto indirizzo locale che in realtà lancia lo script.
Aprire il file alias con il comando:
|
0 |
sudo nano /etc/aliases
|
Al fondo del file aggiungere la seguente riga:
|
0 |
allarmi-telegram: "|/usr/local/bin/mail2telegram.sh"
|
Salvare e chiudere il file di configurazione
Aggiornare gli alias con il comando:
|
0 |
sudo newaliases
|
Ora qualsiasi mail inviata a allarmi-telegram@localhost verrà passata allo script e quindi verrà inviata a Telegram.
Procediamo nel duplicare automaticamente le mail in uscita da un mittente specifico.
Qui entra in gioco il fatto che il Postfix è configurato come smarthost.
Vogliamo che tutte le mail che Postfix invia con un certo mittente (es. [email protected]) vengano anche inoltrate a allarmi-telegram@localhost e quindi inviate a Telegram.
Lo facciamo con sender_bcc_maps.
Creare la mappa sender_bcc con il seguente comando:
|
0 |
sudo nano /etc/postfix/sender_bcc
|
Aggiungere ll’interno del file una riga del tipo:
|
0 |
allarmi@example.com allarmi-telegram@localhost
|
Salvare e chiudere il file di configurazione.
[email protected] = mittente che usano i tuoi device/app
allarmi-telegram@localhost = alias che abbiamo creato
Salvare e chiudere il file di configurazione e poi generare la mappa con il comando:
|
0 |
sudo postmap /etc/postfix/sender_bcc
|
Questo comando crea /etc/postfix/sender_bcc.db, che è il file binario letto da Postfix.
Se in futuro vuoi aggiungere altri mittenti, basta aggiungere altre righe nello stesso file e rifare postmap.
Abilitare sender_bcc_maps in Postfix editando il file /etc/postfix/main.cf con il comando:
|
0 |
sudo nano /etc/postfix/main.cf
|
Aggiungere (o modificare se è già presente) la riga:
|
0 |
sender_bcc_maps = hash:/etc/postfix/sender_bcc
|
Salvare il file e poi ricaricare Postfix con il comando:
|
0 |
sudo systemctl reload postfix
|
CONFIGURAZIONE DELLO SCRIPT PER RICEVERE ANCHE GLI ALLEGATI SU TELEGRAM
La prima cosa da fare è installare lo strumento per estrarre gli allegati: ripmime
Su Ubuntu eseguire il comando:
|
0 |
sudo apt install -y ripmime
|
Ripmime serve a prendere un file .eml (la mail grezza) e tirarne fuori gli allegati in una cartella.
Ora sostituire lo script con una versione “ibrida” che fa le seguenti cose:
- Salva tutta la mail in un file temporaneo.
- Estrae subject, from e qualche riga di body → messaggio Telegram.
- Usa ripmime per estrarre gli allegati.
- Invia ogni allegato come document a Telegram.
- Cancella tutto dalla cartella /tmp.
Editare lo script con il comando:
|
0 |
sudo nano /usr/local/bin/mail2telegram.sh
|
Quindi incollare il seguente contenuto:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#!/bin/bash
# === CONFIGURARE QUI ===
TOKEN="123456789:AAAbbbCCCdddEEEfffGGGhhhIIIjjj"
CHAT_ID="-1001234567890" # ID chat/gruppo (può essere negativo)
# =====================
# Crea una directory temporanea
TMPDIR=$(mktemp -d /tmp/mail2tg.XXXXXX)
# Salva l'email completa in un file
cat > "$TMPDIR/mail.eml"
# Legge il contenuto della mail dal file
MAIL="$(cat "$TMPDIR/mail.eml")"
# Estrae Subject e From dalle intestazioni
SUBJECT=$(printf '%s\n' "$MAIL" | grep -m1 "^Subject:" | cut -d' ' -f2-)
FROM=$(printf '%s\n' "$MAIL" | grep -m1 "^From:" | cut -d' ' -f2-)
# Corpo dell'email (dopo la prima riga vuota), limitato a 20 righe
BODY=$(printf '%s\n' "$MAIL" | sed -n '/^$/,$p' | head -n 20)
TEXT=" Allarme Postfix (smarthost)
From: $FROM
Subject: $SUBJECT
$BODY"
# Invia il messaggio testuale
curl -s \
--data-urlencode "chat_id=$CHAT_ID" \
--data-urlencode "text=$TEXT" \
"https://api.telegram.org/bot$TOKEN/sendMessage" >/dev/null 2>&1
# Estrae allegati dalla mail con ripmime
ripmime -i "$TMPDIR/mail.eml" -d "$TMPDIR" >/dev/null 2>&1
# Invia ogni file estratto (allegati) come documento
for f in "$TMPDIR"/*; do
# salta il file originale della mail
[ "$f" = "$TMPDIR/mail.eml" ] && continue
# salta se non è un file normale
[ -f "$f" ] || continue
# Invia l'allegato come documento
curl -s \
-F chat_id="$CHAT_ID" \
-F document=@"$f" \
"https://api.telegram.org/bot$TOKEN/sendDocument" >/dev/null 2>&1
done
# Pulisce la directory temporanea
rm -rf "$TMPDIR"
exit 0
|
Salvare e chiudere il file di configurazione quindi renderlo eseguibile con il comando:
|
0 |
sudo chmod +x /usr/local/bin/mail2telegram.sh
|
RIASSUNTO DEL FUNZIONAMENTO
Riassumendo, Un device/app invia una mail usando il tuo smarthost Postfix con mittente, ad esempio: MAIL FROM:<[email protected]>
Postfix: inoltra la mail normalmente verso il destinatario finale (Internet / relay). In automatico fa una BCC verso allarmi-telegram@localhost grazie a sender_bcc_maps.
L’indirizzo allarmi-telegram è un alias che esegue mail2telegram.sh.
Lo script legge la mail da stdin, estrae Subject/From/Body e manda tutto su Telegram tramite il bot.
CONSIDERAZIONI FINALI
Integrare Postfix con Telegram si rivela una soluzione semplice ma estremamente efficace per migliorare la visibilità degli allarmi e delle notifiche di sistema.
In pochi passaggi abbiamo trasformato un normale server di posta in un sistema di alert in tempo reale, capace di avvisare istantaneamente via chat ogni volta che si verifica un evento critico.
Dal punto di vista tecnico, il vantaggio principale è che questa configurazione:
- non richiede software esterni né servizi a pagamento;
- non altera il flusso di posta originale, perché utilizza una copia BCC gestita da Postfix;
- è facilmente estendibile: puoi filtrare i messaggi per mittente, dominio o parola chiave, oppure instradare notifiche diverse verso gruppi Telegram differenti.
L’unico accorgimento da mantenere nel tempo è proteggere il token del bot Telegram (non deve mai essere pubblico) e, se necessario, monitorare che lo script di inoltro resti eseguibile e funzionante dopo aggiornamenti del sistema.
Nel complesso, questa integrazione rappresenta un ottimo equilibrio tra semplicità e utilità pratica: un piccolo accorgimento che può fare la differenza tra scoprire un problema in tempo o dopo ore di inattività.
Un esempio perfetto di come, con pochi comandi e un po’ di automazione, si possa portare un tocco “smart” anche nella gestione dei servizi più tradizionali come Postfix.


0 commenti