• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        在PHP中用Socket發送電子郵件(二)

        在PHP中用Socket發送電子郵件(二)

        更新時間:2022-05-13 文章作者:未知 信息來源:網絡 閱讀次數:

        send_mail類的實現
          現在開始介紹我所編寫的發送郵件類。有了上面的預備知識了,下面就是實現了。

        類的成員變量

        var $lastmessage; //記錄最后返回的響應信息
        var $lastact; //最后的動作,字符串形式
        var $welcome; //用在HELO后面,歡迎用戶
        var $debug; //是否顯示調試信息
        var $smtp; //smtp服務器
        var $port; //smtp端口號
        var $fp; //socket句柄

          其中,$lastmessage和$lastact用于記錄最后一次響應信息及執行的命令,當出錯時,用戶可以使用它們。為了測試需要,我還定義了$debug變量,當其值為true時,會在運行過程中顯示一些執行信息,否則無任何輸出。$fp用于保存打開后的socket句柄。

        類的構造


        --------------------------------------------------------------------------------
        function send_mail($smtp, $welcome="", $debug=false)
        {
        if(empty($smtp)) die("SMTP cannt be NULL!");
        $this->smtp=$smtp;
        if(empty($welcome))
        {
        $this->welcome=gethostbyaddr("localhost");
        }
        else
        $this->welcome=$welcome;
        $this->debug=$debug;
        $this->lastmessage="";
        $this->lastact="";
        $this->port="25";
        }
        --------------------------------------------------------------------------------
          這個構造函數主要完成一些初始值的判定及設置。$welcome用于HELO指令中,告訴服務器用戶的名字。HELO指令要求為機器名,但是不用也可以。如果用戶沒有給出$welcome,則自動查找本地的機器名。

        顯示調試信息

        --------------------------------------------------------------------------------
        1 function show_debug($message, $inout)
        2 {
        3 if ($this->debug)
        4 {
        5 if($inout=="in") //響應信息
        6 {
        7 $m='<< ';
        8 }
        9 else
        10 $m='>> ';
        11 if(!ereg("\n$", $message))
        12 $message .= "<br>";
        13 $message=nl2br($message);
        14 echo "<font color=#999999>${m}${message}</font>";
        15 }
        16 }
        --------------------------------------------------------------------------------
          這個函數用來顯示調試信息。可以在$inout中指定是上傳的指令還是返回的響應,如果為上傳指令,則使用"out";如果為返回的響應則使用"in"。

        第3行,判斷是否要輸出調試信息。
        第5行,判斷是否為響應信息,如果是,則在第7行將信息的前面加上"<< "來區別信息;否則在第10行加上">> "來區別上傳指令。
        第11-12行,判斷信息串最后是否為換行符,如不是則加上HTML換行標記。第13行將所以的換行符轉成HTML的換行標記。
        第14行,輸出整條信息,同時將信息顏色置為灰色以示區別。執行一個命令

        --------------------------------------------------------------------------------
        1 function do_command($command, $code)
        2 {
        3 $this->lastact=$command;
        4 $this->show_debug($this->lastact, "out");
        5 fputs ( $this->fp, $this->lastact );
        6 $this->lastmessage = fgets ( $this->fp, 512 );
        7 $this->show_debug($this->lastmessage, "in");
        8 if(!ereg("^$code", $this->lastmessage))
        9 {
        10 return false;
        11 }
        12 else
        13 return true;
        14 }
        --------------------------------------------------------------------------------
          在編寫socket處理部分發現,一些命令的處理很相似,如HELO,MAIL FROM,RCPT TO,QUIT,DATA命令,都要求根據是否顯示調試信息將相關內容顯示出來,同時對于返回的響應碼,如果是期望的,則應繼續處理,如果不是期望的,則應中斷出理。所以為了清晰與簡化,專門對這些命令的處理編寫了一個通用處理函數。函數的參數中$code為期望的響應碼,如果響應碼與之相同則表示處理成功,否則出錯。

        第3行,記錄最后執行命令。
        第4行,將上傳命令顯示出來。
        第5行,則使用fputs真正向服務器傳換指令。
        第6行,從服務器接收響應信息將放在最后響應消息變量中。
        第7行,將響應信息顯示出來。
        第8行,判斷響應信息是否期待的,如果是則第13行返回成功(true),否則在第10行返回失敗(false)。

          這樣,這個函數一方面完成指令及信息的發送顯示功能,別一方面對返回的響應判斷是否成功。


        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 亚洲成a人不卡在线观看| 无码欧精品亚洲日韩一区| 最新亚洲精品国偷自产在线| 日本亚洲免费无线码| 久久久久se色偷偷亚洲精品av| 黄页网站在线观看免费高清| 亚洲ts人妖网站| 午夜一级免费视频| 亚洲爆乳少妇无码激情| 午夜毛片不卡高清免费| 激情婷婷成人亚洲综合| 亚洲精品国产V片在线观看| 久久久久免费视频| 亚洲国产精品免费视频| 中文字幕av无码无卡免费| 亚洲av无码片vr一区二区三区| 免费A级毛片在线播放不收费| 一级全免费视频播放| 亚洲AV日韩AV天堂一区二区三区| 蜜桃视频在线观看免费视频网站WWW| 亚洲国产成a人v在线| 国产无遮挡裸体免费视频| 一级美国片免费看| 久久噜噜噜久久亚洲va久| 无码乱肉视频免费大全合集| 亚洲av日韩aⅴ无码色老头 | 中文字幕免费在线观看动作大片| 国产亚洲精品va在线| 在线视频精品免费| 乱人伦中文视频在线观看免费| 亚洲成AV人片在线观看无码| 特级做A爰片毛片免费69| 一级毛片免费播放视频| 中文字幕亚洲综合久久2| 国产成人aaa在线视频免费观看| a毛片免费在线观看| 亚洲色大成网站www永久男同 | 久久精品成人免费观看97| 亚洲精品电影在线| 国产成人亚洲精品91专区手机| 中文字幕免费观看|