C'è una pagina di Google che visualizza le nuove mail ricevute, solo quelle nuove, ovviamente dopo essersi autenticati.
Giustamente.... Direte voi, dov'è la novità?!?! Basta aprire un browser ed entrare in gmail, si potranno visualizzare sia quelle nuove che quelle vecchie!
Beh, se Google l'ha resa disponibile non pensate ci sia un motivo? Magari è possibile sfruttarla in qualche modo... magari tramite un terminale Linux... Esatto!
La pagina in questione è la seguente:
https://mail.google.com/mail/feed/atom
Se apriamo un terminale e la interroghiamo, ad esempio con curl, applicando qualche comando tipo tr... sed... ecc... potremmo filtrare per esempio l'oggetto di ogni e-mail, oppure il mittente, il corpo del messaggio ecc...
Questo comando, per esempio:
curl -u propria-mail:password "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F "<entry>" '{for (i=2; i<=NF; i++) {print $i}}' | sed -n "s/<title>\(.*\)<\/title.*summary>\(.*\)<\/summary.*name>\(.*\)<\/name>.*email>\(.*\)<\/email>.*/\3 \4 \1 - \2/p"
esegue un po' di operazioni e come risultato visualizza:
nome associato [spazio] e-mail [spazio] oggetto [spazio] - [spazio] messaggio
Ovviamente propria-mail:password non sono altro che nome utente e password di accesso a gmail.
aggiungendo alla fine un reindirizzamento ( >pippo.txt ) potremmo ottenere un file di testo contenente una serie di righe, una per ogni nuova e-mail, con le informazioni filtrate nel modo appena descritto.
Per molti potrà non avere alcuna utilità, ma per altri potrebbe essere, per esempio, uno spunto per interagire con il proprio computer tramite mail, nel caso non si avesse a disposizione una connessione ssh o altri sistemi.
Si potrebbe impostare uno script in cron che ogni tanto esegua un controllo di nuove mail e se magari oggetto o qualche altra informazione corrispondono ad una determinata parola chiave lo script potrebbe eseguire qualche comando.
Ad esempio, se l'oggetto della mail corrisponde ad una determinata parola chiave, supponiamo "ciao" lo script potrebbe eseguire il comando che noi scriveremo nel corpo della mail, supponiamo "ls -al".
Alla fine inoltre lo script potrebbe anche inviarci il risultato come file allegato ad una mail, oppure come corpo del messaggio.
Gli utilizzi potrebbero essere tanti, a seconda delle necessità.
Buon utilizzo!
Riporto qui sotto il listato di uno script, a livello molto grezzo e ottimizzabile, che avevo iniziato a fare in passato. Per funzionare funziona ma si potrebbe ottimizzare un po'.
In ogni caso, questo script controlla le nuove gmail, verifica quelle che arrivano da me e in oggetto riportano una determinata parola chiave, in caso affermativo esegue il comando passato nel corpo del messaggio e ne invia i risultati in mail.
Utilizza i pacchetti curl, ssmtp e uuencode.
#!/bin/bash
nome_file=pippo.txt
report_errori=report_errori.txt
report_comando=report_comando.txt
# ---------------
to="To: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo."
from="From: e-mail_mittente@xxx.yyy"
oggetto_mail_errori="Subject: Report Esecuzione Comando - Errori"
oggetto_mail_comando="Subject: Report Esecuzione Comando"
testo=""
# 1 = title = oggetto della mail
# 2 = summary = testo della mail (non credo tutto)
# 3 = name = nome associato alla mail
# 4 = email = indirizzo mail
curl -u email_login:password_login "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F "<entry>" '{for (i=2; i<=NF; i++) {print $i}}' | sed -n "s/<title>\(.*\)<\/title.*summary>\(.*\)<\/summary.*name>\(.*\)<\/name>.*email>\(.*\)<\/email>.*/\3 \4 \1 ---\2/p"> $nome_file
# verifica esistenza del file
if [ ! -f $nome_file ]; then
echo "Il file $nome_file non esiste!"
else
# Link filedescriptor 10 con stdin
exec 10<&0
# stdin rimpiazzato con argomento 1 passato allo script
exec < $nome_file
# Memorizza nell'array ARRAY le righe del file e verifica, saltando, le righe vuote
while read LINE; do
ARRAY[$arraycount]=$LINE
((arraycount++));
done
# Ripristino stdin dal filedescriptor 10 e chiusura filedescriptor 10
exec 0<&10 10<&-
totale=${#ARRAY[@]}
# echo "Totale righe lette: "$totale
for ((i=0; i<totale; i++)); do
nome=$(echo ${ARRAY[i]} | awk '{ print $1 }')
indirizzo=$(echo ${ARRAY[i]} | awk '{ print $2 }')
oggetto=$(echo ${ARRAY[i]} | awk '{ print $3 }')
# echo $nome
# echo $indirizzo
# echo $oggetto
if [ $nome == "me" ] && [ $indirizzo == "Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo." ] && [ $oggetto == "parola_chiave" ]; then
comando=$(echo ${ARRAY[i]} | sed -n "s/.*---\(.*\)/\1/p")
# echo $comando
echo $comando >>$report_errori
echo "----------------------------------" >>$report_errori
$comando 2>>$report_errori
echo "==================================" >>$report_errori
echo $comando >>$report_comando
echo "----------------------------------" >>$report_comando
$comando >>$report_comando
echo "==================================" >>$report_comando
fi
done
# mail con allegato
echo -e $to"\n"$from"\n"$oggetto_mail_errori"\n"$testo"\n" | (cat - && uuencode $report_errori $report_errori) | ssmtp Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
echo -e $to"\n"$from"\n"$oggetto_mail_comando"\n"$testo"\n" | (cat - && uuencode $report_comando $report_comando) | ssmtp Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
rm $nome_file
rm $report_errori
rm $report_comando
fi
exit 0
Sostituire i diversi indirizzi e-mail, la parola chiave e password di accesso... Ad esempio, inviatevi un'e-mail che come oggetto contenga la vostra parola chiave prescelta, e come corpo del messaggio per esempio ls -al. Vi tornerà in mail il risultato sotto forma di file di testo allegato, una mail per il risultato e una per gli errori.
Se questo script lo si mette in cron... gli usi possono essere svariati.