SMTP郵件發(fā)送工具代碼很簡單,就連接郵件服務(wù)器,端口好像不能用ssl的,登陸需要SMTP地址、端口、賬號、密碼!
軟件相關(guān)
SMTP協(xié)議
SMTP在RFC 821中定義,它的作用是把郵件消息從發(fā)信人的郵件服務(wù)器傳送到收信人的郵件服務(wù)器。SMTP的歷史比HTTP早得多,其RFC是在1982年編寫的,而SMTP的現(xiàn)實使用又在此前多年就有了。盡管SMTP有許多奇妙的品質(zhì)(它在因特網(wǎng)上的無所不在就是見證),但卻是一種擁有某些“古老”特征的傳統(tǒng)戰(zhàn)術(shù)。例如,它限制所有郵件消息的信體(而不僅僅是信頭)必須是簡單的7位ASCII字符格式。這個限制在20世紀80年代早期是有意義的,當時因特網(wǎng)傳輸能力不足,沒有人在電子郵件中附帶大數(shù)據(jù)量的圖像、音頻或視頻文件。然而到了多媒體時代的今天,這個限制就多少顯得局促了——它迫使二進制多媒體數(shù)據(jù)在由SMTP傳送之前首先編碼成7位ASCII文本;SMTP傳送完畢之后,再把相應(yīng)的7位ASCII文本郵件消息解碼成二進制數(shù)據(jù)。HTTP不需要對多媒體數(shù)據(jù)進行這樣的編碼解碼操作。
舉例
下面我們通過查看一個常見的情形來說明SMTP的基本操作。假設(shè)甲給乙發(fā)送一個簡單的ASCII文本郵件消息:
甲調(diào)用自己的電子郵件用戶代理,給出乙的電子郵件地址,寫好郵件內(nèi)容,然后讓用戶代理發(fā)送本郵件消息。
甲的用戶代理把該郵件消息發(fā)送到她的郵件服務(wù)器中,由郵件服務(wù)器把該消息排入某個消息隊列中。
運行在甲的郵件服務(wù)器上的SMTP客戶端看到消息隊列中的這個郵件消息后,打開一個到運行在乙的郵件服務(wù)器主機上的SMTP服務(wù)器端的TCP連接。
經(jīng)過最初的一些SMTP握手之后,SMTP客戶把甲的郵件消息發(fā)送到TCP連接上。
在乙的郵件服務(wù)器主機上,SMTP服務(wù)器收到這個郵件消息后,把這個消息投遞到乙的郵箱中。
乙在方便的時候調(diào)用自己的電子郵件用戶代理閱讀該郵件消息。
需注意的是,SMTP通常不使用中間的郵件服務(wù)器主機中轉(zhuǎn)郵件,即便源端和目的端郵件服務(wù)器主機位于地球上相反的位置也一樣。假設(shè)Aiice的郵件服務(wù)器主機在香 港,Bob的郵件服務(wù)器主機在阿拉巴馬州,那么所建立的TCP連接將是這兩臺服務(wù)器主機之間的連接。具體地說,如果Bob的郵件服務(wù)器不工作了,那么甲發(fā)給乙的郵件消息將存留在甲的郵件服務(wù)器中等待新的嘗試,而不會存放到某個中間的郵件服務(wù)器中。
下面查看SMTP把郵件消息從發(fā)送端郵件服務(wù)器傳送到接收端郵件服務(wù)器的具體過程:
我們將看到,SMTP協(xié)議與人們用于面對面交互的禮儀之間有許多相似之處。首先,運行在發(fā)送端郵件服務(wù)器主機上的SMTP客戶,發(fā)起建立一個到運行在接收端郵件服務(wù)器主機上的SMTP服務(wù)器端口號25之間的TCP連接。如果接收郵件服務(wù)器當前不在工作,SMTP客戶就等待一段時間后再嘗試建立該連接。這個連接建立之后,SMTP客戶和服務(wù)器先執(zhí)行一些應(yīng)用層握手操作。就像人們在轉(zhuǎn)手東西之前往往先自我介紹那樣,SMTP客戶和服務(wù)器也在傳送信息之前先自我介紹一下。在這個SMTP握手階段,SMTP客戶向服務(wù)器分別指出發(fā)信人和收信人的電子郵件地址。彼此自我介紹完畢之后,客戶發(fā)出郵件消息。SMTP可以指望由TCP提供的可靠數(shù)據(jù)傳輸服務(wù)把該消息無錯地傳送到服務(wù)器。如果客戶還有其他郵件消息需發(fā)送到同一個服務(wù)器,它就在同一個TCP連接上重復(fù)上述過程;否則,它就指示TCP關(guān)閉該連接。
與HTTP的比較
我們簡單地比較一下SMTP和HTTP。這兩個協(xié)議都是用于從一臺主機向另一臺主機傳送文件;HTTP用于從web服務(wù)器向Web用戶代理(即瀏覽器)傳送文件(或?qū)ο?,SMTP用于從一個郵件服務(wù)器向另一個郵件服務(wù)器傳送文件(也就是電子郵件消息)。在傳送文件時,SMTP和持久HTTP都使用持久連接。可見,這兩個協(xié)議具有一些共同的特征,不過它們之間的差別也是顯著的。首先,HTTP基本上是一個內(nèi)拉式協(xié)議(pull proto col)——有人把信息上傳到web服務(wù)器中,用戶則在方便的時候使用HTTP把這些信息從服務(wù)器上拉過來。更確切地說,HTTP連接是由想要接收文件的主機發(fā)起的。SMTP則基本上是一個外推式協(xié)議(push Proto col)——發(fā)送端郵件服務(wù)器把文件推送給接收端郵件服務(wù)器。更確切地說,SMTP連接是由想要發(fā)送文件的主機發(fā)起的。
SMTP和HTTP的第二個重要差別是,SMTP要求包括信體部分在內(nèi)的每個郵件消息都是7位ASCII文本格式。