domenica 15 maggio 2016

Come mandare una mail con telnet

Perchè usare un comodo client di posta per spedire email quando è possibile mandare mail con telnet?
Se anche tu usi windows e vuoi provare per una volta l'emozione di giocare al giovane linuxaro, ecco la guida che fa per te.

Prima di tutto, se usi un windows recente, magari telnet è pure disattivato, se non sai come abilitarlo leggi qui.

Apri il prompt dei comandi di dos (cmd.exe) e digita:
telnet 127.0.0.1 25
Telnet è il comando che apre la connessione con il client telnet all'ip indicato (in questo caso 127.0.0.1, ovvero il localhost), mentre 25 è la porta usata per la connessione.

Se ad esempio ci si voleva connettere all'smtp di google, bisognava scrivere:
telnet smtp.gmail.com 587
Ma qui vi stoppo subito: non ci si può connettere a gmail con telnet di windows perchè non supporta il protocollo starttls.
Bisognerebbe usare openssl, quindi torniamo al nostro esempio dove proviamo a spedire collegandoci ad un smtp server fatto in casa (leggi qui se vuoi scoprire come creare un smtp server su windows).

Comunque, se siamo riusciti a collegarci all'smtp server, questo ci risponderà con un messagio di saluti, al quale dovremo rispondere scrivendo:
EHLO 127.0.0.1
O in alcuni casi usando HELO al posto di EHLO, seguito comunque dal nome del server con cui ci si sta collegando, che può essere un ip o una sigla tipo localhost.

ps dopo ogni comando che vi iscrivo si intende che si va a capo digitando invio.

Bene, ora il server ci risponderà in base a come è configurato.

Se il server necessità di autentificazione, digitate:
AUTH LOGIN
Il  server risponderà con la seguente stringa: 334 VXNlcm5hbWU6
Questo geroglifico vuol dire in base64 che vi sta chiedendo la vostra username codificata in base 64, quindi dovrete incollare nel terminale la vostra username codificata in base64 e poi premere invio.
Il server risponderà ancora in base64: 334 UGFzc3dvcmQ6
Dovrete quindi incollare la vostra password in base64 nel terminale e premere invio.
Se avrete fatto tutto correttamente, il server vi risponderà con un messaggio del genere:
235 Authentication succeeded.
Se hai bisogno di sapere come codificare/decodificare una password in base64 leggi qui.

Altrimenti saltate pure questo passaggio (diversi mail server non richiedono autentificazione se ci si collega dalla stessa rete. Se ad esempio il tuo smtp server è sul tuo pc, magari l'hai impostato per non richiedere username e password).

Inseriamo l'indirizzo email del mittente:
MAIL FROM: mittente@email.it
Dove possiamo mettere qualsiasi indirizzo email, anche uno falso (poi magari dipende cmq dalle limitazioni del nostro mail server).
Se il server risponde una cosa tipo 250 OK... chettelodicoaffare.

Inseriamo l'indirizzo email del destinatario:
RCPT TO: destinatario@email.it
Se il server risponde ancora 250 OK, siamo ok.

Adesso scriviamo il messaggio da spedire, iniziando ad aprire il comando digitando:
DATA
Diamo l'invio e digitiamo:
SUBJECT: Titolo email seguito da 2 invii
E diamo dunque 2 invii.

Adesso digitiamo il testo del messaggio, andando a capo quante volte vogliamo con il tasto invio.
Ad esempio:
Ciao, questa è una prova
Capito?

Infine, per spedire la mail, lasciamo un acapo e digitiamo il punto (.) e poi premiamo invio.
.
Il server dovrebbe rispondere che l'email è stata spedita con un messaggio del genere:
Message accepted for delivery

Per uscire da telnet digita:
quit
e premi invio.

Ecco fatto, comodo vero? Dopotutto siamo solo nel 2016, perchè usare un client di posta e spedire una mail del genere in 30 secondi quando puoi impiegarci anche 5 minuti? :p

Se invece il server vi risponde una cosa del genere:
250 Queued (21.968 seconds)
Preoccupatevi, perchè il messaggio è stato messo in coda e quindi non è stato spedito!

Come mandare una mail con telnet

Nel mio caso infatti, avendo provato a spedire a gmail da un indirizzo gmail, sono stato bloccato.
Ho quindi sbirciato nei log dell'smtp server e ho trovato il seguente messaggio:
"RECEIVED: 354  Go ahead codicestrano.122 - gsmtp"
"Our system has detected that this message is not[nl]550-5.7.1 RFC 5322 compliant. To reduce the amount of spam sent to Gmail, this[nl]550-5.7.1 message has been blocked. Please review[nl]550 5.7.1  RFC 5322 specifications for more information."


Te capi? Mi hanno preso pure per uno spammer :)
Mo vallo a sapere dove ho toppato (ad esempio non ho messo il doppio acapo prima del punto finale, anche se non sono certo che sia indispensabile) e non ho rispettato lo standard RFC 5322...
Lassate stare telnet che è meglio :p

Scherzi a parte, telent può anche essere comodo per testare velocemente se ci sono problemi con la propria posta interna. Se si è pratici, in pochi secondi si può verificare se le mail vengono spedite e che messaggi riceviamo dal server, cosa invece non è sempre visibile se spediamo email usando una webapp.

2 commenti

"Se il server necessità di autentificazione, digitate:
USER username
PASS password"

Quello dovrebbe funzionare col protocollo POP3; per SMTP, a quanto ne so, è:

AUTHINFO USER utente
AUTHINFO PASS pw

ciao, credo tu abbia ragione
anche se forse la sintassi è:
AUTH LOGIN
poi bisogna scrivere la user e la pwd codificata in base64... complicationo in effetti... domani cerco meglio e correggo, grazie :)

Lascia un commento!