在PHP中用Socket寄送電子郵件(三)

來源:互聯網
上載者:User

簡介:這是在PHP中用Socket寄送電子郵件(三)的詳細頁面,介紹了和php,有關的知識、技巧、經驗,和一些php源碼等。

class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=327698' scrolling='no'>

郵件發送處理

  下面是真正的秘密了,可要看仔細了。:)

1    function send( $to,$from,$subject,$message)
2    {
3
4        //串連伺服器
5        $this->lastact=\"connect\";
6
7        $this->show_debug(\"Connect to SMTP server : \".$this->smtp, \"out\");
8        $this->fp = fsockopen ( $this->smtp, $this->port );
9        if ( $this->fp )
10        {
11
12            set_socket_blocking( $this->fp, true );
13            $this->lastmessage=fgets($this->fp,512);
14            $this->show_debug($this->lastmessage, \"in\");
15
16            if (! ereg ( \"^220\", $this->lastmessage ) )
17            {
18                return false;
19            }
20            else
21            {
22                $this->lastact=\"HELO \" . $this->welcome . \"\n\";
23                if(!$this->do_command($this->lastact, \"250\"))
24                {
25                    fclose($this->fp);
26                    return false;
27                }
28
29                $this->lastact=\"MAIL FROM: $from\" . \"\n\";
30                if(!$this->do_command($this->lastact, \"250\"))
31                {
32                    fclose($this->fp);
33                    return false;
34                }
35
36                $this->lastact=\"RCPT TO: $to\" . \"\n\";
37                if(!$this->do_command($this->lastact, \"250\"))
38                {
39                    fclose($this->fp);
40                    return false;
41                }
42               
43                //發送本文
44                $this->lastact=\"DATA\n\";
45                if(!$this->do_command($this->lastact, \"354\"))
46                {
47                    fclose($this->fp);
48                    return false;
49                }
50
51                //處理Subject頭
52                $head=\"Subject: $subject\n\";
53                if(!empty($subject) && !ereg($head, $message))
54                {
55                    $message = $head.$message;
56                }
57               
58                //處理From頭
59                $head=\"From: $from\n\";
60                if(!empty($from) && !ereg($head, $message))
61                {
62                    $message = $head.$message;
63                }
64
65                //處理To頭
66                $head=\"To: $to\n\";
67                if(!empty($to) && !ereg($head, $message))
68                {
69                    $message = $head.$message;
70                }
71
72                //加上結束串
73                if(!ereg(\"\n\.\n\", $message))
74                    $message .= \"\n.\n\";
75                $this->show_debug($message, \"out\");
76                fputs($this->fp, $message);
77
78                $this->lastact=\"QUIT\n\";
79                if(!$this->do_command($this->lastact, \"250\"))
80                {
81                    fclose($this->fp);
82                    return false;
83                }
84            }
85            return true;
86        }
87        else
88        {
89            $this->show_debug(\"Connect failed!\", \"in\");
90            return false;
91        }
92    }
--------------------------------------------------------------------------------  有些意思很清楚的我就不說了。

  這個函數一共有四個參數,分別是$to表示收信人,$from表示發信人,$subject表求郵件主題和$message表示郵件體。如果處理成功則返回true,失敗則返回false。

第8行,串連郵件伺服器,如果成功響應碼應為220。
第12行,設定阻塞模式,表示資訊必須返回才能繼續。詳細說明看手冊吧。
第16行,判斷響應碼是否為220,如果是,則繼續處理,否則出錯返回。
第22-27行,處理HELO指令,期望響應碼為250。
第29-34行,處理MAIL FROM指令,期望響應碼為250。
第36-41行,處理RCPT TO指令,期望響應碼為250。
第44-49行,處理DATA指令,期望響應碼為354。
第51-76行,產生郵件體,並發送。
第52-56行,如果$subject不為空白,則尋找郵件體中是否有主題部分,如果沒有,則加上主題部分。
第59-63行,如果$from不為空白,則尋找郵件體中是否有發信人部分,如果沒有,則加上發信人部分。
第66-70行,如果$to不為空白,則尋找郵件體中是否有收信人部分,如果沒有,則加上收信人部分。
第73-74行,尋找郵件體是否有了結束行,如果沒有則加上郵件體的結束行(以\".\"作為單獨的一行的特殊行)。
第76行,發送郵件體。
第78-83行,執行QUIT結否與伺服器的串連,期望響應碼為250。
第85行,返回處理成功標誌(true)。
第81-91行,與伺服器串連失敗的處理。
 以上為整個send_mail類的實現,應該不是很難的。

“在PHP中用Socket寄送電子郵件(三)”的更多相關文章 》

愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具

http://biancheng.dnbcw.info/php/327698.html pageNo:12

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.