• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VC++ SMTP協議電子郵件傳送剖析

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    摘要:本文介紹了一種采用SMTP 協議 規范并通過直接使用SMTP 協議 命令而在程序中實現電子郵件傳送的方法。并在VC++ 開發 環境下給出了部分關鍵的實現代碼。 前言 電子郵件服務作為Internet上應用最多和最廣的服務項目得到了非常廣泛的應用,在 網絡 應用中

    摘要:本文介紹了一種采用SMTP協議規范并通過直接使用SMTP協議命令而在程序中實現電子郵件傳送的方法。并在VC++開發環境下給出了部分關鍵的實現代碼。

      前言

      電子郵件服務作為Internet上應用最多和最廣的服務項目得到了非常廣泛的應用,在網絡應用中也起到非常重要的作用。如同其他的網絡服務,電子郵件系統也有其使用的傳輸協議,包括SMTP(SimpleMailTransferProtocol,簡單郵件傳輸協議)、POP(PostOfficeProtocol,郵局協議)和IMAP(InternetMessageAclearcase/" target="_blank" >ccessProtocal,消息訪問協議)等,這些協議應用于電子郵件的發送和接收。一些郵件處理軟件如OutLookExpress和FoxMail等就是按照SMTP和POP3協議結合WindowsSockets套接字進行設計來收發郵件的。本文以SMTP協議為研究對象,在VisualC++6.0編程環境下按照SMTP協議通過套接字發送SMTP命令,接收并處理郵件服務器的反饋信息,從而實現對電子郵件的發送。

      SMTP協議的通訊模型和會話流程

      SMTP協議通訊模型

      SMTP協議是TCP/IP協議族中的一員,主要對如何將電子郵件從發送方地址傳送到接收方地址,也即是對傳輸的規則做了規定。SMTP協議的通信模型并不復雜,主要工作集中在發送SMTP和接收SMTP上:首先針對用戶發出的郵件請求,由發送SMTP建立一條連接到接收SMTP的雙工通訊鏈路,這里的接收SMTP是相對于發送SMTP而言的,實際上它既可以是最終的接收者也可以是中間傳送者。發送SMTP負責向接收SMTP發送SMTP命令,而接收SMTP則負責接收并反饋應答??纱笾掠孟旅娴耐ㄓ嵞P褪疽鈭D來表示:




      SMTP協議的命令和應答

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

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

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

      SMTP協議的每一個命令都會返回一個應答碼,應答碼的每一個數字都是有特定含義的,如第一位數字為2時表示命令成功;為5表失??;3表沒有完成。一些較復雜的郵件程序利用該特點,首先檢查應答碼的首數字,并根據其值來決定下一步的動作。下面將SMTP的應答碼列表如下:

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

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>