Uno script interattivo da terminale per inviare email via SMTP da qualsiasi sistema Linux. Supporta Office 365, Google, Aruba, server custom, e include modalità debug, autenticazione, TLS/SSL e altro ancora.
Quando si lavora su server Linux — che siano on-premise, in cloud o su ambienti embedded — avere la possibilità di inviare email direttamente da terminale è una necessità frequente: notifiche, report di backup, allarmi, output di script cron e altro ancora.
Molti pensano subito a mailx, sendmail o configurazioni complesse di Postfix, ma in realtà c’è una via molto più semplice, flessibile e portabile: usare lo strumento swaks con uno script interattivo capace di connettersi a qualsiasi server SMTP, da Office 365 a Gmail, da server personalizzati fino ai provider hosting.

Perché questo strumento è utile?
Chi lavora con:
- server Linux (cloud, VPS, on-prem),
- backup, monitoraggi, automazioni cron,
- ambienti senza interfacce grafiche,
…sa quanto sia importante avere un modo semplice, affidabile e personalizzabile per inviare email via SMTP.
Questo script ti consente di:
- inviare email da terminale,
- connetterti a qualsiasi server SMTP,
- usare autenticazione, TLS, SSL o nessuna cifratura,
- attivare una modalità debug per test o verifica.
Requisiti
Pacchetto swaks installato, in molti sistemi questo programma è gia presente se cosi non fosse installiamolo dai repository
Installazione di swaks
# Ubuntu/Debian
sudo apt update
sudo apt install swaks
Installazione dello script
- entriamo nella cartella dove vogliamo salvare lo script e creaiamo il file con il nome che preferiamo:
nano testsendamail.sh
e incolliamo lo script,
#!/bin/bash
# === PARSING ARGOMENTI ===
DEBUG=false
for arg in "$@"; do
if [[ "$arg" == "--debug" ]]; then
DEBUG=true
fi
done
# === CHIEDI DEBUG SE NON PASSATO ===
if ! $DEBUG; then
echo "🛠 Vuoi attivare la modalità debug?"
echo " (equivale a lanciare il programma con: sendmail365 --debug)"
read -p "Attivare modalità debug? [y/N]: " REPLY_DEBUG
if [[ "$REPLY_DEBUG" =~ ^[Yy]$ ]]; then
DEBUG=true
fi
fi
# === DEFAULTS ===
DEFAULT_SMTP_SERVER="smtp.office365.com"
DEFAULT_SMTP_PORT=587
DEFAULT_BODY="Questo è un test di invio tramite SMTP con autenticazione"
DEFAULT_SUBJECT="Test invio SMTP"
# === PROMPT UTENTE ===
read -p "SMTP server [$DEFAULT_SMTP_SERVER]: " SMTP_SERVER
SMTP_SERVER=${SMTP_SERVER:-$DEFAULT_SMTP_SERVER}
read -p "SMTP port [$DEFAULT_SMTP_PORT]: " SMTP_PORT
SMTP_PORT=${SMTP_PORT:-$DEFAULT_SMTP_PORT}
echo "Tipo di sicurezza per la connessione:"
echo "1) STARTTLS (porta 587, consigliato)"
echo "2) SSL implicita (porta 465)"
echo "3) Nessuna cifratura (porta 25 o altro, NON consigliato)"
read -p "Seleziona [1-3]: " SECURITY_CHOICE
case "$SECURITY_CHOICE" in
2)
SECURITY_FLAG="--ssl"
;;
3)
SECURITY_FLAG=""
;;
*)
SECURITY_FLAG="--tls"
;;
esac
read -p "SMTP username (email): " SMTP_USER
read -s -p "SMTP password o password per app: " SMTP_PASS
echo ""
read -p "Indirizzo FROM [$SMTP_USER]: " FROM
FROM=${FROM:-$SMTP_USER}
read -p "Destinatario TO: " TO
read -p "Oggetto email [$DEFAULT_SUBJECT]: " SUBJECT
SUBJECT=${SUBJECT:-$DEFAULT_SUBJECT}
echo "Testo email di default:"
echo "$DEFAULT_BODY"
read -p "Vuoi usare questo testo? [Y/n]: " BODY_CONFIRM
if [[ "$BODY_CONFIRM" =~ ^[Nn]$ ]]; then
read -p "Inserisci il nuovo testo del messaggio: " BODY
else
BODY=$DEFAULT_BODY
fi
# === DEBUG MODE ===
if $DEBUG; then
echo "=== DEBUG MODE ON ==="
echo "SMTP Server: $SMTP_SERVER"
echo "SMTP Port: $SMTP_PORT"
echo "SMTP User: $SMTP_USER"
echo "FROM: $FROM"
echo "TO: $TO"
echo "SUBJECT: $SUBJECT"
echo "BODY: $BODY"
echo "SECURITY FLAG: $SECURITY_FLAG"
echo ""
echo "Comando swaks che verrà eseguito:"
echo swaks --to "$TO" \
--from "$FROM" \
--server "$SMTP_SERVER" \
--port "$SMTP_PORT" \
--auth LOGIN \
--auth-user "$SMTP_USER" \
--auth-password "********" \
$SECURITY_FLAG \
--header "Subject: $SUBJECT" \
--body "\"$BODY\""
echo ""
read -p "Eseguire comunque il comando? [Y/n]: " CONFIRM_EXEC
if [[ "$CONFIRM_EXEC" =~ ^[Nn]$ ]]; then
echo "Esecuzione annullata."
exit 0
fi
fi
# === INVIO ===
swaks --to "$TO" \
--from "$FROM" \
--server "$SMTP_SERVER" \
--port "$SMTP_PORT" \
--auth LOGIN \
--auth-user "$SMTP_USER" \
--auth-password "$SMTP_PASS" \
$SECURITY_FLAG \
--header "Subject: $SUBJECT" \
--body "$BODY"
fatto questo, per comodità ( come gia visto negli articoli precedenti) dopo averlo reso eseguibile, possiamo rendelo siponibile da ovunque nel sistema
chmod +x testsendamail.sh
sudo mv sendmail365 /usr/local/bin/testsendamail.sh
Ora puoi usare sendmail365 come un qualsiasi comando Linux!
Cosa fa lo script?
si ma…. cosa fa esattamente quel “pippone” la sopra? in breve permette di configurare in maniera dinamica una mail di prova con i suoi vari paramtri per poter testare l’autenticazione e il funzionamento di un server SMTP.
lo script funziona con qualsiasi provider SMTP, tra cui:
- ✅ Office 365 / Microsoft 365
- ✅ Gmail / Google Workspace
- ✅ Aruba, OVH, IONOS, ecc.
- ✅ Postfix, Sendmail, Exim interni
- ✅ Server SMTP on-prem o cloud
Basta inserire i dati corretti: server, porta, sicurezza e credenziali.
- Ti chiede i dati SMTP in modo interattivo
- Supporta:
- STARTTLS (porta 587)
- SSL/TLS implicita (porta 465)
- Nessuna cifratura (porta 25 o personalizzata)
- Esegue l’invio con
swaks - Puoi attivare la modalità
--debugper vedere cosa verrà eseguito
Autenticazione e sicurezza
Office 365 o Gmail
sia Office 365 che Gmail stanno gradualmente forzando l’autenticazione a piu fattori nei loro sistemi, lo script fuznona anche in questo caso, ma come per altre applicazioni legate al mondo “posta” di questi sistemi diventa INDISPENSABILE generare una “APP PASSWORD”
- Genera una password per app da:
Come si usa?
lo script, per come è ideato, prevede due tipi di funzionamento, uno completamente interattivo in cui verremo guidati nella compilazione dei vari parametri
Uso base:
testsendamail.sh
oppure possimo forzare direttamente la modalita “debug” saltando quella domanda
Modalità debug:
testsendamail --debug
Conclusione
Uno script come testsendmail è indispensabile per chi lavora su sistemi Linux, reti aziendali o ambienti cloud. È semplice, potente, portabile — e ora anche completamente personalizzabile.
