| 
 下面是真正的秘密了,可要看仔细了。:)  phperz.com
 -------------------------------------------------------------------------------- 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";
 www~phperz~com 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";  www.phperz.com
 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 }
 --------------------------------------------------------------------------------
 有些意思很清楚的我就不说了。  php程序员站
   这个函数一共有四个参数,分别是$to表示收信人,$from表示发信人,$subject表求邮件主题和$message表示邮件体。如果处理成功则返回true,失败则返回false。   phperz.com 第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程序员站 下面给出一个实例。  php程序员之家
 邮件发送实例   www.phperz.com   先给出一个最简单的实例: <?php
 1 include "sendmail.class.php3";
 2 $email="Hello, this is a test letter!";
 3 $sendmail=new send_mail("smtp.263.net", "limodou", true); //显示调示信息
 4 if($sendmail->send("chatme@263.net", "chatme@263.net", "test", $email))
 5 {
 6 echo "发送成功!<br>";
 7 }
 8 else
 9 {
 10 echo "发送失败!<br>";
 11 }
 ?>  www.phperz.com
 第1行,装入send_mail类。 第3行,创建一个类的实例,且设置显示调示信息,如果不想显示,可以
 $sendmail=new send_mail("smtp.263.net");。
 第4行,发送邮件。  www.phperz.com
 很简单,不是吗?下面再给合以前的发送MIME邮件的例子,给出一个发送HTML附件的例子。
 phperz.com <?php   phperz~com include "MIME.class.php3"; //注,在发送MIME邮件一文中,这个类文件名为MIME.class,在此处我改成这样的  www.phperz.com
 $to = 'chatme@263.net'; //改为收信人的邮箱 $str = "Newsletter for ".date('M Y', time());
 php程序员站 //信息被我改少了 $html_data = '<html><head><title>'. $str. '</title></head>
 <body bgcolor="#ffffff">
 Hello! This is a test!
 </body>
 </html>';  www~phperz~com
 //生成MIME类实例 $mime = new MIME_mail("chatme@263.net", $to, $str);
 php程序员站 //添加HTML附件 $mime->attach($html_data, "", HTML, BASE64);  php程序员站
 //注释掉,采用我的发送邮件处理 //$mime->send_mail();  www.phperz.com
 //生成邮件 $mime->gen_email();
 www.phperz.com //显示邮件信息 //echo $mime->email."<br>";  phperz.com
 //包含sendmail文件 include "sendmail.class.php3";  phperz.com
 //创建实例 $sendmail=new send_mail("smtp.263.net", "limodou", true);
 php程序员站 //发送邮件 $sendmail->send("chatme@263.net", "chatme@263.net", $str, $mime->email);  php程序员之家
 ?> 注释写的很清楚,就不再做更多的解释了。如果实际应用中,请将send_mail构造函数中的debug设为false或不写即可。
 
 www.phperz.com
 
 |