·您的位置: 首页 » 资源教程 » 编程开发 » PHP » 在PHP中用Socket发送电子邮件(三)

在PHP中用Socket发送电子邮件(三)

类别: PHP教程  评论数:0 总得分:0

邮件发送处理

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


1 function send( $to,$from,$subject,$message)2 {34 //连接服务器5 $this->lastact=/"connect/";67 $this->show_debug(/"Connect to SMTP server : /".$this->smtp,
/"out/");8 $this->fp = fsockopen ( $this->smtp, $this->port );9 if ( $this->fp )10 {1112 set_socket_blocking( $this->fp, true );13 $this->lastmessage=fgets($this->fp,512);14 $this->show_debug($this->lastmessage, /"in/");1516 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 }2829 $this->lastact=/"MAIL FROM: $from/" . /"/n/";30 if(!$this->do_command($this->lastact, /"250/"))31 {32 fclose($this->fp);33 return false;34 }3536 $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 }5051 //处理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 }6465 //处理To头66 $head=/"To: $to/n/";67 if(!empty($to) && !ereg($head, $message))68 {69 $message = $head.$message;70 }7172 //加上结束串73 if(!ereg(/"/n/./n/", $message))74 $message .= /"/n./n/";75 $this->show_debug($message, /"out/");76 fputs($this->fp, $message);7778 $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 else88 {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类的实现,应该不是很难的。

-= 资 源 教 程 =-
文 章 搜 索
关键词:
类型:
范围:
纯粹空间 softpure.com
Copyright © 2006-2008 暖阳制作 版权所有
QQ: 15242663 (拒绝闲聊)  Email: faisun@sina.com
 纯粹空间 - 韩国酷站|酷站欣赏|教程大全|资源下载|免费博客|美女壁纸|设计素材|技术论坛   Valid XHTML 1.0 Transitional
百度搜索 谷歌搜索 Alexa搜索 | 粤ICP备19116064号-1