2009-10-04 28 views
34

Sono in procinto di scrivere un'applicazione che invia posta tramite un ID utente e una password GMail validi.Connessione a smtp.gmail.com tramite riga di comando

Volevo solo simulare la connessione SMTP sulla mia riga di comando di Windows XP, e quando ho telnet smtp.gmail.com a 465 porte - non vedo nulla. Si apre una finestra di comando vuota con il titolo Telnet smtp.gmail.com con il cursore. Quando digito EHLO oi consueti comandi di handshake SMTP, il prompt si chiude.

Non riesco a capire che cosa sta andando storto e dove. Ho provato a connetterti a 587, non si connette affatto a Telnet. Qualcuno potrebbe chiarire se sto facendo qualcosa di sbagliato?

+0

Consulta anche: http://stackoverflow.com/a/36296872/59087 –

risposta

4

Gmail richiede la comunicazione SMTP con il proprio server da crittografare. Sebbene tu stia aprendo una connessione al server di Gmail sulla porta 465, sfortunatamente non sarai in grado di comunicare con esso in chiaro poiché Gmail richiede l'uso della crittografia STARTTLS/SSL per la connessione.

+1

è così c'è nessun modo posso farlo da riga di comando? – Abhishek

2

Controllare questo post in lifehacker: Geek to Live: Back up Gmail with fetchmail. Usa un programma a riga di comando. Controlla e vedi se aiuta. Perché stai usando la riga di comando quando ci sono molte altre buone alternative?

+1

Hey Shoban, sto solo cercando di trovare o scrivere uno script di azione che invii la posta per usarlo nella mia applicazione flex – Abhishek

5

Prova questo:

telnet smtp.gmail.com 587 
+7

E allora? cosa fai? – trusktr

+9

Nella domanda si afferma che la porta 587 non funzionava e che ha già provato quello che stai fornendo qui. Non stai portando nulla di valore in questa discussione. –

+1

Downvoted perché non utile e nessuna spiegazione su cosa fare in seguito. – Archibald

7

Per terminale OSX':

openssl s_client -connect smtp.gmail.com:25 -starttls smtp 
42

Utilizzando Linux o OSx, fare ciò che raccomanda Sorin, ma utilizzare la porta 465, invece. 25 è la porta SMTP generica, ma non è quella che usa GMail. Inoltre, non credo che si desidera utilizzare -starttls smtp

openssl s_client -connect smtp.gmail.com:465 

Si dovrebbe ottenere un sacco di informazioni sulla sessione SSL e la risposta:

220 mx.google.com ... 

Digitare HELO e riceverai :

250 mx.google.com at your service 

da lì non è così semplice come solo l'invio di messaggi SMTP perché Gmail ha protezioni in atto per garantire che si invia solo messaggi di posta elettronica che sembra essere da conti che in realtà belon g a te. Invece di digitare "Helo", usa "Ehlo". Non so molto di SMTP, quindi non posso spiegare la differenza e non ho tempo per fare ricerche. Forse qualcuno con più conoscenza può spiegare.

Poi, digitare "auth login" e si riceverà il seguente:

334 VXNlcm5hbWU6 

Questo è essenzialmente la parola "Username" codificato in base 64. Usando una Base 64 encoder come this one, codificare l'utente nome e inseriscilo. Fai lo stesso per la tua password, che viene richiesta successivamente. Dovresti vedere:

235 2.7.0 Accepted 

E questo è tutto, hai effettuato l'accesso.

C'è ancora una stranezza da superare se si utilizzano terminali OSx o Linux. Basta premere il tasto "INVIO" non sembra in un CRLF che SMTP deve terminare un messaggio. Devi usare "CTRL + V + INVIO". Quindi, questo dovrebbe essere simile alla seguente:

^M 
.^M 
250 2.0.0 OK 
+3

Per osx almeno, è possibile aggiungere "-crlf" alla connessione iniziale "openssl" per farlo funzionare correttamente con RETURNS. per esempio. openssl s_client -connect smtp.gmail.com: 465 -crlf –

+2

Sono passati quasi due anni da quando hai postato questo, ma in effetti è un'ottima risposta. Grazie! – Greg0ry

+1

Funziona ancora come un fascino. Se solo Gmail stupido non mi ha chiesto di accedere utilizzando i miei browser Web dal mio server in cui ho solo una console; /. – Reinmar

2

tcp/465 inizialmente è stato destinato per stabilire il protocollo SSL (e più recenti TLS) primo strato, e al suo interno facendo cifrato o vecchi protocolli semplici (smtp qui)

tcp/587 era inteso come una sostituzione alla porta tcp/25 predefinita inizialmente quando gli spammer e gli attacchi di massa iniziarono come un decennio o più fa, ma anche durante quelle famigerate età AOL, quando alcuni divertenti ISP avevano alcuni blocchi sulle porte predefinite in uscita (tale come tale tcp/25) per aver negato ai propri clienti (AOL) di inviare e-mail/spam di massa, ma i clienti AOL che hanno bisogno di utilizzare account e-mail e provider di posta alternativi hanno ancora bisogno di inviare le loro e-mail da AOL-internet connec in modo che potessero ancora connettersi a tcp/587 e fare un semplice smtp su di esso.

L'accordo con il metodo STARTTLS per smtp è utilizzare le due ben note porte tcp/25 e tcp/587 originariamente in chiaro, e solo quando è stato superato il collegamento del testo in chiaro iniziale, per poi iniziare il livello TLS (quindi STARTTLS) da lì in poi, avendo una connessione protetta da quel punto in poi.

Come per il debug di questo tipo di cose, magari tramite strumenti da riga di comando, ad esempio per Windows c'è lo storico blat mailer command line (smtp), che fino ad oggi non può fare TLS (STARTTLS) in modo che possa usare solo -text smtp per inviare i suoi messaggi.

http://www.blat.net/

Poi ci sono numerosi progetti source software freeware e open che hanno più capacità e le caratteristiche, come ad esempio

client SMTP: MailSend @ googlecode http://code.google.com/p/mailsend/

client SMTP: msmtp @ SourceForge (relativo a mpop sotto) http://msmtp.sourceforge.net/

client pop3: mpop @ sourceforge http://mpop.sourceforge.net/

0

gmail utilizza una connessione crittografata. Quindi, anche dopo aver stabilito una connessione, non sarai in grado di inviare alcuna email. La crittografia è un po 'complessa da gestire. Prova invece a usare openssl.

Il filo di seguito dovrebbe Aiuto-

How to send email using simple SMTP commands via Gmail?

Problemi correlati