來源:互聯網
上載者:User
關鍵字
電子郵件
發送
message
處理
this-lasta
郵件發送處理
下面是真正的秘密了,可要看仔細了。:)
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類的實現,應該不是很難的。