郵件收發(fā)系統(tǒng)總結(jié)
郵件收發(fā)系統(tǒng)總結(jié)
1引言
1.1編寫(xiě)目的
1.總結(jié)郵件收發(fā)系統(tǒng)開(kāi)發(fā)過(guò)程中的思想和想法2.總結(jié)系統(tǒng)開(kāi)發(fā)時(shí)遇到的問(wèn)題和尚未解決的問(wèn)題3.提出系統(tǒng)需要完善的功能,模塊等
4.總結(jié)開(kāi)發(fā)過(guò)程中用到的技術(shù)和學(xué)習(xí)到的知識(shí)5.加深對(duì)技術(shù)及知識(shí)的鞏固和理解
1.2背景
a.項(xiàng)目名稱(chēng):郵件收發(fā)系統(tǒng)
開(kāi)發(fā)環(huán)境:WindowsXP/xampp(PHP+Apache+Mysql)/GVIMb.任務(wù)提出者:李波(libo@eyou.net)
任務(wù)開(kāi)發(fā)者:李鵬菲(li.pengfei@eyou.net)
1.3參考資料
a.PHP參考手冊(cè)b.Jquery參考手冊(cè)c.CSS參考手冊(cè)d.Smarty參考手冊(cè)
2實(shí)際開(kāi)發(fā)結(jié)果
2.1目錄結(jié)構(gòu)
ClassImagesJs1).jquery-1.4.min.js2).custom.jsTemplates1).index.tpl
---文件夾:smarty模板類(lèi)---文件夾:程序中的圖片---文件夾:程序中的js文件---1.4版jquery包含文件---jquery主文件---文件夾:模板文件---首頁(yè)tpl模板
2).Mail_send.tpl3).Mail_list.tpl4).Css.cssFunction.phpInclude.phpIndex.phpMail_ajax.phpMail_back.phpMail_class.phpMail_list.phpMail_send.phpPage_class.phpPop_class.php---郵件發(fā)送頁(yè)面tpl模板
---郵件列表及郵件詳細(xì)信息頁(yè)面(主頁(yè)面)tpl模板---樣式表文件---系統(tǒng)函數(shù)文件
---smarty模板文件,系統(tǒng)全局替換變量在此文件定義---首頁(yè)文件
---Ajax請(qǐng)求頁(yè).處理pop相關(guān)ajax請(qǐng)求并返回?cái)?shù)據(jù)---Ajax請(qǐng)求頁(yè)smtp相關(guān)ajax請(qǐng)求并返回?cái)?shù)據(jù)---smtp郵件發(fā)送類(lèi)文件---郵件列表頁(yè)---郵件發(fā)送頁(yè)---分頁(yè)類(lèi)
---pop郵件接收類(lèi)文件
2.2主要功能和性能
a.利用SMTP協(xié)議實(shí)現(xiàn)郵件的發(fā)送;
兼容性不夠.對(duì)PHP的MIME編碼應(yīng)用不夠.郵件頭部分字段未編碼和郵件體位編碼碼
b.利用POP協(xié)議實(shí)現(xiàn)郵件的接收;
兼容性不夠.Head解碼時(shí),不能正確處理多個(gè)收件人的情況.Body解碼時(shí),換行處亂碼.
c.郵件列表頁(yè)分頁(yè);
每頁(yè)2封郵件,點(diǎn)擊郵件標(biāo)題進(jìn)入郵件詳細(xì)信息頁(yè)面,點(diǎn)擊預(yù)覽可預(yù)覽按鈕郵件內(nèi)容.
2.3未能完成的功能
(一)郵件詳細(xì)信息頁(yè)面:
1.郵件詳細(xì)信息頁(yè)面的動(dòng)態(tài)改變字體大小;2.快速回復(fù)文本信息(二)郵件列表頁(yè)
1.給郵件列表頁(yè)標(biāo)題標(biāo)記顏色的功能還沒(méi)有做完;2.快速回復(fù)文本信息
3.滑過(guò)發(fā)件人名字時(shí)彈出的浮動(dòng)層中:
1)如果發(fā)件人在通訊錄中,則顯示發(fā)件人的其他擴(kuò)展信息
2)給出針對(duì)發(fā)件人的操作按鈕,如:阻止此人信件(即加入黑名單),添加到通訊錄(如果不在通訊錄中的話(huà)),顯示所有此人發(fā)來(lái)的郵件…(三)查詢(xún)功能…
4經(jīng)驗(yàn)與教訓(xùn)
通過(guò)這次程序開(kāi)發(fā),我對(duì)郵件收發(fā)系統(tǒng)的發(fā)送和接收郵件有了基本的了解;對(duì)POP協(xié)議和SMTP的工作原理有了一定的認(rèn)識(shí);對(duì)Smarty模板的使用有了新的認(rèn)識(shí),我會(huì)繼續(xù)學(xué)習(xí)Smarty并將其靈活運(yùn)用到以后的開(kāi)發(fā)過(guò)程中;也在開(kāi)發(fā)過(guò)程中接觸并學(xué)習(xí)到了新的知識(shí).雖然之前看過(guò)入職須知中的代碼規(guī)范,由于習(xí)慣以及其他原因,自己的代碼書(shū)寫(xiě)不規(guī)范,在以后的開(kāi)發(fā)中要保持正確的代碼書(shū)寫(xiě)習(xí)慣.嚴(yán)格按照代碼規(guī)范走;加強(qiáng)對(duì)Jquery,Smarty的學(xué)習(xí);熟悉gvim的使用;
擴(kuò)展閱讀:郵件收發(fā)系統(tǒng)
郵件收發(fā)系統(tǒng)
電子郵件(簡(jiǎn)稱(chēng)E-mai1)又稱(chēng)電子信箱、電子郵政,它是種用電子手段提供信息交換的通信方式。它是全球多種網(wǎng)絡(luò)上使用最普遍的一項(xiàng)服務(wù)。這種非交互式的通信,加速了信息的交流及數(shù)據(jù)傳送,它是個(gè)簡(jiǎn)易、快速的方法。通過(guò)連接全世界的Internet,實(shí)現(xiàn)各類(lèi)信號(hào)的傳送、接收、存貯等處理,將郵件送到世界的各個(gè)角落。到目前為止,可以說(shuō)電子郵件是Internet資源使用最多的一種服務(wù),E-mai1不只局限于信件的傳遞,還可用來(lái)傳遞文件、聲音及圖形、圖像等不同類(lèi)型的信息。
電子郵件不是一種“終端到終端”的服務(wù),是被稱(chēng)為“存貯轉(zhuǎn)發(fā)式”服務(wù)。這正是電子信箱系統(tǒng)的核心,利用存貯轉(zhuǎn)發(fā)可進(jìn)行非實(shí)時(shí)通信,屬異步通信方式。即信件發(fā)送者可隨時(shí)隨地發(fā)送郵件,不要求接收者同時(shí)在場(chǎng),即使對(duì)方現(xiàn)在不在,仍可將郵件立刻送到對(duì)方的信箱內(nèi),且存儲(chǔ)在對(duì)方的電子郵箱中。接收者可在他認(rèn)為方便的時(shí)候讀取信件,不受時(shí)空限制。在這里,“發(fā)送”郵件意味著將郵件放到收件人的信箱中,而“接收”郵件則意味著從自己的信箱中讀取信件,信箱實(shí)際上是由文件管理系統(tǒng)支持的個(gè)實(shí)體。因?yàn)殡娮余]件是通過(guò)郵件服務(wù)器(mai1server)來(lái)傳遞檔的。通常mailserver是執(zhí)行多任務(wù)操作系統(tǒng)UNIX的計(jì)算機(jī),它提供24小時(shí)的電子郵件服務(wù),用戶(hù)只要向mailserver管理人員申請(qǐng)個(gè)信箱賬號(hào),就可使用這項(xiàng)快速的郵件服務(wù)。
電子郵件的工作原理:
1)電子郵件系統(tǒng)是一種新型的信息系統(tǒng),是通信技術(shù)和計(jì)算機(jī)技術(shù)結(jié)合的產(chǎn)物。
電子郵件的傳輸是通過(guò)電子郵件簡(jiǎn)單傳輸協(xié)議(SimpleMailTransferProtocol,簡(jiǎn)稱(chēng)SMTP)這一系統(tǒng)軟件來(lái)完成的,它是Internet下的一種電子郵件通信協(xié)議。
2)電子郵件的基本原理,是在通信網(wǎng)上設(shè)立“電子信箱系統(tǒng)”,它實(shí)際上是一個(gè)計(jì)算機(jī)系統(tǒng)。系統(tǒng)的硬件是一個(gè)高性能、大容量的計(jì)算機(jī)。硬盤(pán)作為信箱的存儲(chǔ)介質(zhì),在硬盤(pán)上為用戶(hù)分一定的存儲(chǔ)空間作為用戶(hù)的“信箱”,每位用戶(hù)都有屬于自己的個(gè)電子信箱。并確定個(gè)用戶(hù)名和用戶(hù)可以自己隨意修改的口令。存儲(chǔ)空間包含存放所收信件、編輯信件以及信件存盤(pán)三部分空間,用戶(hù)使用口令開(kāi)啟自己的信箱,并進(jìn)行發(fā)信、讀信、編輯、轉(zhuǎn)發(fā)、存檔等各種操作。系統(tǒng)功能主要由軟件實(shí)現(xiàn)。
3)電子郵件的通信是在信箱之間進(jìn)行的。用戶(hù)首先開(kāi)啟自己的信箱,然后通過(guò)鍵入命令的方式將需要發(fā)送的郵件發(fā)到對(duì)方的信箱中。郵件在信箱之間進(jìn)行傳遞和交換,也可以與另個(gè)郵件系統(tǒng)進(jìn)行傳遞和交換。收方在取信時(shí),使用特定賬號(hào)從信箱提取。
當(dāng)前流行的各大郵件客戶(hù)端軟件的除了最主要的收發(fā)信件之外,功能越來(lái)越復(fù)雜,但是人們平常真正用到的功能很少,很多功能尤其對(duì)于那些計(jì)算機(jī)知識(shí)相對(duì)缺乏的人來(lái)說(shuō),更加顯得太過(guò)于華麗而不太實(shí)用。有鑒于此,在了解RFC底層協(xié)議的基礎(chǔ)上,我們開(kāi)發(fā)了這個(gè)各種功能相對(duì)簡(jiǎn)單實(shí)用的郵件客戶(hù)端程序,簡(jiǎn)化了很多不必要的功能。軟件的總體架構(gòu)如圖:
發(fā)送郵件類(lèi)接收郵件類(lèi)主要功能選擇主界面
郵件發(fā)送:
是發(fā)送郵件的核心,類(lèi)名為SmtpMail,隸屬于命名空間MailSend。封裝了發(fā)送郵件的具體實(shí)現(xiàn)方法,也是具體的RFC用代碼實(shí)現(xiàn)的過(guò)程。而用戶(hù)通過(guò)具體的操作接口,接口與SmtpMail類(lèi)通過(guò)交互操作來(lái)實(shí)現(xiàn)用戶(hù)發(fā)送信件的操作。STMP協(xié)議以及工作原理:
由于要開(kāi)發(fā)的是郵件客戶(hù)端程序,就不得不用到SMTP協(xié)議和POP協(xié)議。而我個(gè)人負(fù)責(zé)的是郵件發(fā)送功能的實(shí)現(xiàn),因此就必然會(huì)涉及到SMTP(SimpleMailTransferProtocol)協(xié)議。SMTP被用來(lái)在因特網(wǎng)上發(fā)送郵件,該協(xié)議規(guī)定了一些基本的命令和方法使客戶(hù)端與服務(wù)器進(jìn)行交互,以達(dá)到發(fā)送郵件的目的。簡(jiǎn)單郵件傳輸協(xié)議(SMTP)的目標(biāo)是可靠高效地傳送郵件,它獨(dú)立于傳送子系統(tǒng)而且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道。
SMTP的一個(gè)重要特點(diǎn)是它能夠在傳送中接力傳送郵件,傳送服務(wù)提供了進(jìn)程間通信環(huán)境(IPCE),此環(huán)境可以包括一個(gè)網(wǎng)絡(luò),幾個(gè)網(wǎng)絡(luò)或一個(gè)網(wǎng)絡(luò)的子網(wǎng)。理解到傳送系統(tǒng)(或IPCE)不是一對(duì)一的是很重要的。進(jìn)程可能直接和其它進(jìn)程通過(guò)已知的IPCE通信。郵件是一個(gè)應(yīng)用程序或進(jìn)程間通信。郵件可以通過(guò)連接在不同IPCE上的進(jìn)程跨網(wǎng)絡(luò)進(jìn)行郵件傳送。更特別的是,郵件可以通過(guò)不同網(wǎng)絡(luò)上的主機(jī)接力式傳送。
SMTP命令定義了郵件傳輸或由用戶(hù)定義的系統(tǒng)功能。它的命令是由結(jié)束的字符串。而在帶有參數(shù)的情況下,命令本身由和參數(shù)分開(kāi),如果未帶參數(shù)可以直接和連接。郵箱的語(yǔ)法格式必須和接收站點(diǎn)的格式一致。下面討論SMTP命令和應(yīng)答。
發(fā)送郵件操作涉及到不同的數(shù)據(jù)對(duì)象,它們由不同的參數(shù)相互連接;貜(fù)路徑就是MAIL命令的參數(shù),而轉(zhuǎn)發(fā)路徑則是RCPT命令的參數(shù),郵件日期是DATA命令的參數(shù)。這些參數(shù)或者數(shù)據(jù)對(duì)象必須跟在命令后。這種模式也就要求有不同的緩沖區(qū)來(lái)存儲(chǔ)這些對(duì)象,也就是說(shuō),有一個(gè)回復(fù)路徑緩沖區(qū),一個(gè)轉(zhuǎn)發(fā)路徑緩沖區(qū),一個(gè)郵件內(nèi)容緩沖區(qū)。特定的命令產(chǎn)生自己的緩沖區(qū),或使一個(gè)或多個(gè)緩沖的內(nèi)容被清除。
HELLO(HELO)
此命令用于向接收SMTP確認(rèn)發(fā)送SMTP。參數(shù)域包括發(fā)送SMTP的主機(jī)名。接收SMTP通過(guò)連接確認(rèn)命令來(lái)向發(fā)送SMTP確認(rèn)接收SMTP。引命令和OK響應(yīng)確認(rèn)發(fā)送和接收SMTP進(jìn)入了初始狀態(tài),也就是說(shuō),沒(méi)有操作正在執(zhí)行,所有狀態(tài)表和緩沖區(qū)已經(jīng)被子清除。
MAIL(MAIL)
此命令用于開(kāi)始將郵件發(fā)送到一個(gè)多個(gè)郵箱中。參數(shù)域包括回復(fù)路徑。返回路徑中包括了可選的主機(jī)和發(fā)送者郵箱列表。當(dāng)有主機(jī)列表時(shí),它是一個(gè)回復(fù)路徑源,它說(shuō)明此郵箱是由在表中的主機(jī)一一傳遞發(fā)送(第一個(gè)主機(jī)是最后一個(gè)接收到此郵件的主機(jī))過(guò)來(lái)的。此表也有作向發(fā)送者返回非傳遞信號(hào)的源路徑。因?yàn)槊總(gè)傳遞主機(jī)地址都被加在此表起始處,它就必須使用發(fā)送IPCE而不是接收IPCE(如果它們不是一個(gè)IPCE的話(huà))清楚的名稱(chēng)。一些出錯(cuò)信息的回復(fù)路徑可能就是空的。DATA(DATA)
接收者將跟在命令后的行作為郵件內(nèi)容。此命令導(dǎo)致此命令后的郵件內(nèi)容加入郵件內(nèi)容緩沖區(qū)。郵件內(nèi)容可以包括所有128個(gè)ASCII碼字符。郵件內(nèi)容由只包括一個(gè)句號(hào)的行結(jié)束,也就是如下的字符序列:".",它指示了郵件的結(jié)束。發(fā)送郵件類(lèi):SmtpMail
主要的函數(shù):SmtpMail()AddAttachment()GetStream()Base64Encode()SendCommand()RecvResponse()郵件的接受:
客戶(hù)端連接服務(wù)器成功后,服務(wù)器會(huì)返回以下信息:+OK……
字符+OK是POP3協(xié)議的返回信息。它的回應(yīng)信息不像SMTP協(xié)議那樣用豐富多變的數(shù)字表示,只有兩個(gè):+OK或者-ERR。其中,+OK表示連接成功,而-ERR則表示連接失敗。
接下來(lái),客戶(hù)端輸入U(xiǎn)SER
該命令告訴服務(wù)器你的用戶(hù)名。注意,有些服務(wù)器會(huì)區(qū)分大小寫(xiě)字母的。服務(wù)器返回+OK后,客戶(hù)端輸入PASS
服務(wù)器返回+OK后,還返回一些郵箱的統(tǒng)計(jì)信息,比如:+OK1message(s)[1304byte(s)]
不同的服務(wù)器返回的信息格式不太一樣,所以我們可以用STAT命令來(lái)查看郵箱的情況。STAT命令的回應(yīng)中有兩個(gè)數(shù)字,分別表示郵件的數(shù)量和郵件的大小。
如果信箱里有信,就可以用RETR命令來(lái)獲取郵件的正文。RETR命令的格式為:
RETR
如果返回結(jié)果第一行是+OK信息,則表示成功。第二行起便是郵件的正文。最后一行和SMTP協(xié)議一樣,是一個(gè)單獨(dú)的英文句號(hào),表示郵件的結(jié)尾部分。把郵件存儲(chǔ)起來(lái)后要用DELE命令刪除郵箱中的郵件,否則原有的郵件會(huì)繼續(xù)保留在服務(wù)器上,一旦郵件一多,你的郵箱就爆了。DELE命令的格式為:
DELE
如果刪錯(cuò)了,可以用RSET命令來(lái)恢復(fù)所有已被刪除的郵件。條件是你還沒(méi)有退出,一旦退出,那就一切ByeBye了。全部完成以后,輸入QUIT命令就可以退出POP3服務(wù)器了。體統(tǒng)運(yùn)行:
試驗(yàn)總結(jié):
通過(guò)這次實(shí)訓(xùn),我學(xué)到了一些基本的網(wǎng)絡(luò)的一些服務(wù)的應(yīng)用,而我選擇的大作業(yè)是郵件的收發(fā)系統(tǒng),所以對(duì)郵件的一些處理更加深刻。要完成這個(gè)系統(tǒng),從SMTP協(xié)議規(guī)定的底層命令做起,一步步的與服務(wù)器進(jìn)行交互操作,最終實(shí)現(xiàn)發(fā)送多附件多接收人的功能。其中,具體的和服務(wù)器的交互操作,都封裝了在SmtpMail.dll這個(gè)動(dòng)態(tài)鏈接庫(kù)里面了。這個(gè)郵件收發(fā)系統(tǒng)相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,以后的日子,隨著我技術(shù)的提高和思想的成熟,我一定會(huì)把它做的更好。
友情提示:本文中關(guān)于《郵件收發(fā)系統(tǒng)總結(jié)》給出的范例僅供您參考拓展思維使用,郵件收發(fā)系統(tǒng)總結(jié):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。