Connettersi in modalità telnet a Gmail e a server IMAPs

Connettersi in modalità telnet a Gmail e a server IMAPs

Ciao a tutti!

Qualche giorno fa ho avuto la necessità di effettuare un backup di sicurezza di tutti i messaggi contenuti all’interno di una casella di posta elettronica Gmail e, per fare ciò, ho utilizzato un comodissimo software per Mac OS, chiamato Gmail Backup.

Tuttavia, durante la copia delle tante email, l’applicazione in questione si è bloccata, a causa di un messaggio che non poteva essere recuperato per motivi non molto chiari (il file di log del software in questione non era dettagliato).

L’unica cosa che riportava il log di Gmail Backup era l’UID della email.

Per questo motivo, ho cercato di capire quale fosse il messaggio in questione e, nel far questo, ho pensato che fosse utile effettuare un collegamento telnet al server IMAPs di Gmail (tramite il terminale e la BASH) e ottenere informazioni circa il messaggio.  Ciò, considerato che Gmail non sembra dare la possibilità di effettuare ricerche dei messaggi email mediante la propria interfaccia WEB basate sugli UID dei messaggi.

Dato che ritengo che questa possa essere una cosa utile non soltanto a me, bensì a tutti coloro che hanno problemi analoghi al mio, ho deciso di scrivere questo post e di condividere questa mia esperienza.

L’idea era piuttosto semplice: se il messaggio non fosse stato utile, allora lo avrei rimosso, in modo da far andare avanti le operazioni di backup delle altre email.

Tuttavia, il collegamento telnet al server IMAP di Google non era un collegamento semplice, in quanto il servizio Gmail utilizza un servizio IMAP su protocollo SSL (il cosiddetto IMAPs o “secured”), su porta TCP 993. Se si fosse trattato di un IMAP semplice, in ascolto sulla porta 143, allora mi sarebbe bastato un comando come questo, per accedere al servizio IMAP da terminale:

# telnet imap.server.com 143

Invece, io avevo bisogno di connettermi in modalità telnet su SSL. Quindi, ho fatto ricorso al software OpenSSL, presente in modo nativo su tutte le distribuzioni di Linux e sui sistemi MAC OS X. Su Windows, invece, è necessario installare OpenSSL, scaricandone ed eseguendone il relativo pacchetto, raggiungibile a questo link: http://gnuwin32.sourceforge.net/packages/openssl.htm.

Detto questo, come ci connettiamo ad un server IMAPs come quello di Gmail?

Ecco il giusto comando da lanciare:

# openssl s_client -connect imap.gmail.com:993 -crlf

In pratica, questa istruzione dice al sistema di collegarsi al server imap.gmail.com, porta 993, stabilendo una connessione SSL, quindi, in questo caso, IMAPs. Ovviamente, un comando simile può essere utilizzato per l’accesso a qualsiasi servizio protetto con SSL (es.: POP3s, HTTPS, SMTPs, ecc.). Ad esempio, per connettersi in modalità telnet al sito https://www.travagliante.com, si potrebbe utilizzare il comando seguente:

# openssl s_client -connect www.travagliante.com:443 -crlf

(Ovviamente, è più comodo connettersi tramite browser, ma nel caso in cui si debba fare attività di debug di un sito web, può essere utile sapere che esiste anche questa possibilità.)

Una volta lanciato il comando openssl per la connessione al server IMAPs di Gmail, possiamo compiere qualsiasi operazione in modalità telnet.

Ad esempio, possiamo identificarci e autenticarci, fornendo nome utente e password:

tag LOGIN nomeutente@gmail.com password

ecco la risposta di Gmail:

* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT APPENDLIMIT=35882577 LIST-EXTENDED LIST-STATUS
tag OK nomeutente@gmail.com authenticated (Success)

Oppure, possiamo vedere quali sono le cartelle presenti nella casella di posta elettronica:

tag LIST “” “*”

ottenendo qualcosa di simile:

* LIST (\HasNoChildren) “/” “INBOX”
* LIST (\HasNoChildren) “/” “Notes”
* LIST (\HasNoChildren) “/” “Sent Messages”
* LIST (\HasChildren \Noselect) “/” “[Gmail]”
* LIST (\Drafts \HasNoChildren) “/” “[Gmail]/Bozze”
* LIST (\HasNoChildren \Trash) “/” “[Gmail]/Cestino”
* LIST (\HasNoChildren \Important) “/” “[Gmail]/Importanti”
* LIST (\HasNoChildren \Sent) “/” “[Gmail]/Posta inviata”
* LIST (\HasNoChildren \Junk) “/” “[Gmail]/Spam”
* LIST (\Flagged \HasNoChildren) “/” “[Gmail]/Speciali”
* LIST (\All \HasNoChildren) “/” “[Gmail]/Tutti i messaggi”

tag OK success

Potremmo selezionare una determinata cartella IMAP:

tag SELECT “INBOX”

Conoscerne il numero di messaggi contenuti:

tag STATUS “INBOX” (MESSAGES)

Ancora, per Gmail, cercare uno o più messaggi, con comandi simili ai seguenti (il primo cerca tra i messaggi non letti con allegati, mentre il secondo cerca la “stringa da cercare”):

tag SEARCH X-GM-RAW “has:attachment in:unread”

tag SEARCH X-GM-RAW “stringa da cercare”

Questi comandi generano un elenco di UID relativi alle email che risultano dalla ricerca. Ad esempio:

* SEARCH 23 24 40
tag OK SEARCH completed (Success)

I messaggi corrispondenti ad una ricerca, nella mia casella, hanno restituito i seguenti UID: 23,24 e 40.

Se vogliamo ottenere il messaggio con UID 40, allora utilizziamo:

tag FETCH 40 full

Il risultato si presenta nella forma seguente:

* 40 FETCH (BODY ((“TEXT” “PLAIN” (“CHARSET” “UTF-8” “FORMAT” “flowed”) NIL NIL “8BIT” 3377 77)((“TEXT” “HTML” (“CHARSET” “UTF-8”) NIL NIL “8BIT” 15389 288)(“IMAGE” “JPEG” (“NAME” “top.jpg”) “<part2.07070106.01030208@server.it>” NIL “BASE64” 9742)(“IMAGE” “PNG” (“NAME” “server.it.png”) “<part6.03070508.06070401@server.it>” NIL “BASE64” 12278)(“IMAGE” “PNG” (“NAME” “ico_linkedin.png”) “<part7.02040204.02030901@server.it>” NIL “BASE64” 1800)(“IMAGE” “PNG” (“NAME” “ico_tweeter.png”) “<part9.06040003.00090703@server.it>” NIL “BASE64” 1792)(“IMAGE” “PNG” (“NAME” “ico_facebook.png”) “<part11.00040706.02070309@server.it>” NIL “BASE64” 1730)(“IMAGE” “PNG” (“NAME” “ico_youtube.png”) “<part13.03060308.08040202@soiel.it>” NIL “BASE64” 1944) “RELATED”) “ALTERNATIVE”) ENVELOPE (“Wed, 18 May 2016 15:15:46 +0200” “Invito alla tavola rotonda – Cloud4Italy” ((NIL NIL “eventi” “server.it”)) ((NIL NIL “eventi” “server.it”)) ((NIL NIL “server” “server.it”)) ((NIL NIL “roberto.travagliante” “gmail.com”)) NIL NIL NIL “<20160518131605.03848688B3F@smtp3.sender.it>”) FLAGS () INTERNALDATE “18-May-2016 13:15:46 +0000” RFC822.SIZE 52747)
tag OK Success

Infine, si può uscire nel seguente modo:

tag LOGOUT

Ovviamente, per accedere ad IMAPs non è necessario utilizzare telnet o openssl, basta un normale client di posta elettronica, oppure il browser. Ma a volte può essere utile accedere in questo modo a IMAP o ad altri servizi, per risolvere problemi di tipo sistemistico, diversamente non facilmente risolvibili.

E, in effetti, alla fine sono riuscito a risolvere il mio problema e a completare il backup!

Commenta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *







Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.