欢迎来到天天文库
浏览记录
ID:41032790
大小:22.33 KB
页数:9页
时间:2019-08-14
《PHP Socket编程介绍》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Socket编程介绍向大家申明,本人不是一个TCP/IP编程专家,故在此只是讲出了我的一点理解和体会。使用fsockopen函数打开一个Internet连接,函数语法格式:intfsockopen(stringhostname,intport,int[errno],string[errstr],int[timeout]);参数的意思我想不用讲了,这里由于要使用SMTP协议,所以端口号为25。在打开连接成功后,会返回一个socket句柄,使用它就可以象使用文件句柄一样的。可使用的操作有fputs(),fgets(),feof
2、(),fclose()等。很简单地介绍就到这里吧。SMTP的基础基于TCP/IP的因特网协议一般的命令格式都是通过请求/应答方式实现的,采用的都是文本信息,所以处理起来要容易一些。SMTP是简单邮件传输协议的简称,它可以实现客户端向服务器发送邮件的功能。所以下面所讲的命令是指客户端向服务器发出请求指令,而响应则是指服务器返回给客户端的信息。SMTP分为命令头和信息体两部分。命令头主要完成客户端与服务器的连接,验证等。整个过程由多条命令组成。每个命令发到服务器后,由服务器给出响应信息,一般为3位数字的响应码和响应文本。不同的
3、服务器返回的响应码是遵守协议的,但是响应正文本则不必。每个命令及响应的最后都有一个回车符,这样使用fputs()和fgets()就可以进行命令与响应的处理了。SMTP的命令及响应信息都是单行的。信息体则是邮件的正文部分,最后的结束行应以单独的"."作为结束行。客户端一些常用的SMTP指令为:HELOhostname:与服务器打招呼并告知客户端使用的机器名字,可以随便填写MAILFROM:sender_id:告诉服务器发信人的地址RCPTTO:receiver_id:告诉服务器收信人的地址DATA:下面开始传输信件内容,且最
4、后要以只含有.的特殊行结束RESET:取消刚才的指令,从新开始VERIFYuserid:校验帐号是否存在(此指令为可选指令,服务器可能不支持)QUIT:退出连接,结束服务器返回的响应信息为(格式为:响应码+空格+解释):220服务就绪(在socket连接成功时,会返回此信息)221正在处理250请求邮件动作正确,完成(HELO,MAILFROM,RCPTTO,QUIT指令执行成功会返回此信息)354开始发送数据,结束以.(DATA指令执行成功会返回此信息,客户端应发送信息)500语法错误,命令不能识别550命令不能执行,邮
5、箱无效552中断处理:用户超出文件空间下面给出一个简单的命令头(这是在打开socket之后做的),是我向stmp.263.net发邮件的测试结果:HELOlimodou250smtp.263.netMAILFROM:chatme@263.net250OkRCPTTO:chatme@263.net250OkDATA354Enddatawith.To:chatme@263.netFrom:chatme@263.netSubject:testFrom:chatme@263.nettest.QUIT250Ok:queuedasC4
6、6411C5097E0这就是一些SMTP的简单知识。相关内容可以查阅RFC。RFC821定义了收/发电子邮件的相关指令。RFC822则制定了邮件內容的格式。RFC2045-2048制定了多媒体邮件內容的格式,RFC1113,1422-1424则是讨论如何增进电子邮件的保密性。send_mail类的实现现在开始介绍我所编写的发送邮件类。有了上面的预备知识了,下面就是实现了。类的成员变量var$lastmessage;//记录最后返回的响应信息var$lastact;//最后的动作,字符串形式var$welcome;//用在H
7、ELO后面,欢迎用户var$debug;//是否显示调试信息var$smtp;//smtp服务器var$port;//smtp端口号var$fp;//socket句柄其中,$lastmessage和$lastact用于记录最后一次响应信息及执行的命令,当出错时,用户可以使用它们。为了测试需要,我还定义了$debug变量,当其值为true时,会在运行过程中显示一些执行信息,否则无任何输出。$fp用于保存打开后的socket句柄。类的构造---------------------------------------------
8、-----------------------------------functionsend_mail($smtp,$welcome="",$debug=false){if(empty($smtp))die("SMTPcanntbeNULL!");$this->smtp=$smtp;if(empty(
此文档下载收益归作者所有