国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 網(wǎng)絡(luò)通信 > 正文

VC++ SMTP協(xié)議電子郵件傳送剖析

2019-11-04 10:57:16
字體:
供稿:網(wǎng)友

摘要:本文介紹了一種采用SMTP協(xié)議規(guī)范并通過直接使用SMTP協(xié)議命令而在程序中實(shí)現(xiàn)電子郵件傳送的方法。并在VC++開發(fā)環(huán)境下給出了部分要害的實(shí)現(xiàn)代碼。

  前言

  電子郵件服務(wù)作為Internet上應(yīng)用最多和最廣的服務(wù)項(xiàng)目得到了非常廣泛的應(yīng)用,在網(wǎng)絡(luò)應(yīng)用中也起到非常重要的作用。如同其他的網(wǎng)絡(luò)服務(wù),電子郵件系統(tǒng)也有其使用的傳輸協(xié)議,包括SMTP(SimpleMailTransferPRotocol,簡單郵件傳輸協(xié)議)、POP(PostOfficeProtocol,郵局協(xié)議)和IMAP(InternetMessageaccessProtocal,消息訪問協(xié)議)等,這些協(xié)議應(yīng)用于電子郵件的發(fā)送和接收。一些郵件處理軟件如OutlookEXPress和Foxmail等就是按照SMTP和POP3協(xié)議結(jié)合WindowsSockets套接字進(jìn)行設(shè)計(jì)來收發(fā)郵件的。本文以SMTP協(xié)議為研究對象,在VisualC++6.0編程環(huán)境下按照SMTP協(xié)議通過套接字發(fā)送SMTP命令,接收并處理郵件服務(wù)器的反饋信息,從而實(shí)現(xiàn)對電子郵件的發(fā)送。

  SMTP協(xié)議的通訊模型和會話流程

  SMTP協(xié)議通訊模型

  SMTP協(xié)議是TCP/ip協(xié)議族中的一員,主要對如何將電子郵件從發(fā)送方地址傳送到接收方地址,也即是對傳輸?shù)囊?guī)則做了規(guī)定。SMTP協(xié)議的通信模型并不復(fù)雜,主要工作集中在發(fā)送SMTP和接收SMTP上:首先針對用戶發(fā)出的郵件請求,由發(fā)送SMTP建立一條連接到接收SMTP的雙工通訊鏈路,這里的接收SMTP是相對于發(fā)送SMTP而言的,實(shí)際上它既可以是最終的接收者也可以是中間傳送者。發(fā)送SMTP負(fù)責(zé)向接收SMTP發(fā)送SMTP命令,而接收SMTP則負(fù)責(zé)接收并反饋應(yīng)答。可大致用下面的通訊模型示意圖來表示:

VC++ SMTP協(xié)議電子郵件傳送剖析




  SMTP協(xié)議的命令和應(yīng)答

  從前面的通訊模型可以看出SMTP協(xié)議在發(fā)送SMTP和接收SMTP之間的會話是靠發(fā)送SMTP的SMTP命令和接收SMTP反饋的應(yīng)答來完成的。在通訊鏈路建立后,發(fā)送SMTP發(fā)送MAIL命令指令郵件發(fā)送者,若接收SMTP此時(shí)可以接收郵件則作出OK的應(yīng)答,然后發(fā)送SMTP繼續(xù)發(fā)出RCPT命令以確認(rèn)郵件是否收到,假如接收到就作出OK的應(yīng)答,否則就發(fā)出拒絕接收應(yīng)答,但這并不會對整個(gè)郵件操作造成影響。雙方如此反復(fù)多次,直至郵件處理完畢。SMTP協(xié)議共包含10個(gè)SMTP命令,列表如下:

SMTP命令命令說明
HELLO<domain><CRLF>識別發(fā)送方到接收SMTP的一個(gè)HELLO命令
MAILFROM:<reverse-path><CRLF><reverse-path>為發(fā)送者地址。此命令告訴接收方一個(gè)新郵件發(fā)送的開始,并對所有的狀態(tài)和緩沖區(qū)進(jìn)行初始化。此命令開始一個(gè)郵件傳輸處理,最終完成將郵件數(shù)據(jù)傳送到一個(gè)或多個(gè)郵箱中。
RCPTTO:<forward-path><CRLF><forward-path>標(biāo)識各個(gè)郵件接收者的地址
DATA<CRLF>
接收SMTP將把其后的行為看作郵件數(shù)據(jù)去處理,以<CRLF>.<CRLF>標(biāo)識數(shù)據(jù)的結(jié)尾。
REST<CRLF>退出/復(fù)位當(dāng)前的郵件傳輸
NOOP<CRLF>要求接收SMTP僅做OK應(yīng)答。(用于測試)
QUIT<CRLF>要求接收SMTP返回一個(gè)OK應(yīng)答并關(guān)閉傳輸。
VRFY<string><CRLF>驗(yàn)證指定的郵箱是否存在,由于安全因素,服務(wù)器多禁止此命令。
EXPN<string><CRLF>驗(yàn)證給定的郵箱列表是否存在,擴(kuò)充郵箱列表,也常禁止使用。
HELP<CRLF>查詢服務(wù)器支持什么命令

注:<CRLF>為回車、換行,ASCII碼分別為13、10(十進(jìn)制)。

  SMTP協(xié)議的每一個(gè)命令都會返回一個(gè)應(yīng)答碼,應(yīng)答碼的每一個(gè)數(shù)字都是有特定含義的,如第一位數(shù)字為2時(shí)表示命令成功;為5表失敗;3表沒有完成。一些較復(fù)雜的郵件程序利用該特點(diǎn),首先檢查應(yīng)答碼的首數(shù)字,并根據(jù)其值來決定下一步的動作。下面將SMTP的應(yīng)答碼列表如下:

應(yīng)答碼說明
501參數(shù)格式錯(cuò)誤
502命令不可實(shí)現(xiàn)
503錯(cuò)誤的命令序列
504命令參數(shù)不可實(shí)現(xiàn)
211系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)
214幫助信息
220<domain>服務(wù)就緒
221<domain>服務(wù)關(guān)閉
421<domain>服務(wù)未就緒,關(guān)閉傳輸信道
250要求的郵件操作完成
251用戶非本地,將轉(zhuǎn)發(fā)向<forward-path>
450要求的郵件操作未完成,郵箱不可用
550要求的郵件操作未完成,郵箱不可用
451放棄要求的操作;處理過程中出錯(cuò)
551用戶非本地,請嘗試<forward-path>
452系統(tǒng)存儲不足,要求的操作未執(zhí)行
552過量的存儲分配,要求的操作未執(zhí)行
553郵箱名不可用,要求的操作未執(zhí)行
354開始郵件輸入,以"."結(jié)束
554操作失敗




發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新巴尔虎左旗| 年辖:市辖区| 湾仔区| 高邑县| 山西省| 博乐市| 南木林县| 江达县| 木兰县| 寿光市| 大理市| 文安县| 临泽县| 个旧市| 冷水江市| 南部县| 桐梓县| 闽侯县| 平罗县| 云南省| 苍南县| 哈巴河县| 康马县| 靖宇县| 光山县| 石台县| 吴川市| 灵台县| 三原县| 恩平市| 乌拉特后旗| 花莲县| 台州市| 宝山区| 黄浦区| 浪卡子县| 婺源县| 松桃| 格尔木市| 客服| 石景山区|