NodeJs 提供了SSL/TLS 這樣的安全連接協(xié)議庫扇雕,so 我們可以用這樣的協(xié)議與郵件服務(wù)器通訊嚎莉。要寫完一個(gè)完整的收郵件的工具還是需要一定的時(shí)間悯搔,流程大致如上面的流程圖了灾常。
那么什么是SSL?什么是TLS?
SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security照激,TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議发魄。TLS與SSL在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密。
SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間俩垃,為數(shù)據(jù)通訊提供安全支持励幼。SSL協(xié)議可分為兩層: SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝口柳、壓縮苹粟、加密等基本功能的支持。 SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上跃闹,用于在實(shí)際的數(shù)據(jù)傳輸開始前嵌削,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法辣卒、交換加密密鑰等掷贾。
安全傳輸層協(xié)議(TLS)用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。該協(xié)議由兩層組成: TLS 記錄協(xié)議(TLS Record)和 TLS 握手協(xié)議(TLS Handshake)荣茫。
TLS 的最大優(yōu)勢就在于:TLS 是獨(dú)立于應(yīng)用協(xié)議想帅。高層協(xié)議可以透明地分布在 TLS 協(xié)議上面。然而啡莉,TLS 標(biāo)準(zhǔn)并沒有規(guī)定應(yīng)用程序如何在 TLS 上增加安全性港准;它把如何啟動(dòng) TLS 握手協(xié)議以及如何解釋交換的認(rèn)證證書的決定權(quán)留給協(xié)議的設(shè)計(jì)者和實(shí)施者來判斷旨剥。
可以看出為了郵件的安全性,采用SSL/TLS的通訊技術(shù)還是有必要的浅缸。廢話不說轨帜,看代碼:
首先引入庫 var tls = require('tls');
var options = {
host: 'pop.qq.com',
port: 995,
user: 'XXXXXXXXXXX@qq.com',
pass: 'XXXXXXXXXX'
}
var Socket = tls.connect(options.port, options.host, cb_connected);
//注冊(cè)事件-連接回調(diào)
Socket.on('connect', cb_connecting);
//注冊(cè)事件-服務(wù)器返回?cái)?shù)據(jù)處理
Socket.on('data', cb_Server_DataBack);
上面的cb_XXXX都是回調(diào)函數(shù)。至于端口和服務(wù)器地址大家參看郵件服務(wù)提供商的幫助了衩椒,是不是很簡單蚌父,3行代碼。
剩余的就是用戶的操作毛萌,輸入命令苟弛,執(zhí)行,顯示操作結(jié)果即可阁将。
利用socket將命令寫到服務(wù)端膏秫,like this : Socket.write("命令 \r\n"); 順帶一提命令以\r\n作為結(jié)束標(biāo)記一定要寫。
pop3協(xié)議的通信是一問一答的模式做盅,想要做批量命令操作的小伙伴就要?jiǎng)狱c(diǎn)腦了缤削。
有興趣的小伙伴可以自行完成剩余的代碼。
好吧吹榴,本來是要寫個(gè)android的收郵件客戶端的亭敢,腦子一熱,用了nodejs图筹,細(xì)思極恐吨拗,還要寫頁面,還要寫一堆東西婿斥,畢竟我還不是全棧劝篷,android的APP有機(jī)會(huì)再分享。感謝閱讀民宿,如有錯(cuò)漏娇妓,還請(qǐng)留言賜教。