2013-06-24 211 views
7

所以我正在學習SMTP,並試圖使用telnet通過SMTP發送一些郵件。使用SMTP,Gmail和STARTTLS

我easilly能夠通過發送郵件到 Gmail帳戶:

$ host gmail.com 
... 
gmail.com mail is handled by 5 gmail-smtp-in.l.google.com. 
... 
$ telnet gmail-smtp-in.l.google.com 25 
Trying 74.125.142.27... 
... 
Connected to gmail-smtp-in.l.google.com. 
... 
HELO <[email protected]> 
... 

但是,我無法從我的Gmail帳戶發送。根據我對SMTP的瞭解,我應該使用SMTP將郵件從< [email protected]> 發送到傳出的gmail SMTP服務器,SMTP服務器又使用SMTP將郵件傳輸到收件人傳入的SMTP服務器等。

但是,我有困難。如果我通過端口465(gmail傳出smtp郵件服務器規範)將telnet轉換爲smtp.gmail.com,我會在HELO <[email protected]>開始後立即斷開連接,或詢問STARTTLS。我無法找到如何繼續的答案。

任何幫助表示讚賞。

旁註:目前我使用星巴克免費Wi-Fi上網。我實際上無法直接從我的電腦telnet(沒有路由到主機錯誤)。相反,它只適用於我的ssh首先在我學校的網絡上的遠程linux盒子,然後telnet從那裏。任何想法爲什麼這是?

謝謝!

回答

21

首先,它看起來像你使用的是錯誤的端口。 Gmail通過SSL提供SMTP端口465,SMTP提供帶STARTTLS的端口587,詳情請見documented here。這兩者之間的區別在於SMTP over SSL首先建立一個安全的SSL/TLS連接並通過該連接進行SMTP,而帶有STARTTLS的SMTP則以未加密的SMTP開始,然後切換到SSL/TLS。這就是爲什麼你沒有得到你的HELO的迴應。

$ telnet smtp.gmail.com 587 
Trying 74.125.25.108... 
Connected to gmail-smtp-msa.l.google.com. 
Escape character is '^]'. 
220 mx.google.com ESMTP fr1sm24834956pbb.26 - gsmtp 
HELO <[email protected]> 
250 mx.google.com at your service 
STARTTLS 
220 2.0.0 Ready to start TLS 

但即使您telnet到端口587,您仍然無法手動發送任何電子郵件。爲了做任何有趣的事情,你將不得不去STARTTLS,你將無法處理SSL/TLS binary protocol協商加密。

+3

退房Swaks彌補原telnet和之間的差距郵件客戶端。對我而言,http://www.jetmore.org/john/code/swaks/ – Jed

+0

根據文檔,STARTTLS無效,587用於TLS,465用於SSL:https://support.google.com/a/答案/ 176600?HL = EN – flotto

15

遠程登錄客戶端不會爲您協商TLS會話。你應該使用另一個工具,比如OpenSSL的s_client。下面爲你發出STARTTLS命令和處理TLS協商:

$ openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf 

或者,你可以直接連接到SMTPS端口:

$ openssl s_client -connect smtp.gmail.com:465 -crlf