• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php a simple smtp class_php实例

php 搞代码 4年前 (2022-01-26) 29次浏览 已收录 0个评论

smtp.class.php

<?php   <br><br>define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE);  <BR>define('SMTP_STATUS_CONNECTED', 2, TRUE);  <br><br>class smtp  <BR>{  <br><br>var $connection;  <BR>var $recipients;  <BR>var $headers;  <BR>var $timeout;  <BR>var $errors;  <BR>var $status;  <BR>var $body;  <BR>var $from;  <BR>var $host;  <BR>var $port;  <BR>var $helo;  <BR>var $auth;  <BR>var $user;  <BR>var $pass;  <BR>var $debug;  <br><br>/**  <BR>* 参数为一个数组  <BR>* host SMTP 服务器的主机 默认:localhost  <BR>* port SMTP 服务器的端口 默认:25  <BR>* helo 发送HELO命令的名称 默认:localhost  <BR>* user SMTP 服务器的用户名 默认:空值  <BR>* pass SMTP 服务器的登陆密码 默认:空值  <BR>* timeout 连接超时的时间 默认:5  <BR>* @return bool  <BR>*/  <br><br>function smtp($params = array())  <BR>{  <br><br>if(!defined('CRLF'))<em style="color:transparent">本文来源gao.dai.ma.com搞@代*码#网</em><a>搞代gaodaima码</a> define('CRLF', “\n”, TRUE);  <br><br>$this->timeout = 5;  <BR>$this->status = SMTP_STATUS_NOT_CONNECTED;  <BR>$this->host = ‘localhost';  <BR>$this->port = 25;  <BR>$this->auth = FALSE;  <BR>$this->user = ”;  <BR>$this->pass = ”;  <BR>$this->errors = array();  <BR>$this->debug = false;  <BR>foreach($params as $key => $value)  <BR>{  <BR>$this->$key = $value;  <BR>}  <br><br>$this->helo = $this->host;  <br><br>// 如果没有设置用户名则不验证  <BR>$this->auth = (” == $this->user) ? FALSE : TRUE;  <BR>}  <br><br>function connect($params = array())  <BR>{  <br><br>if(!isset($this->status))  <BR>{  <BR>$obj = new smtp($params);  <br><br>if($obj->connect())  <BR>{  <BR>$obj->status = SMTP_STATUS_CONNECTED;  <BR>}  <br><br>return $obj;  <br><br>}  <BR>else  <BR>{  <br><br>$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);  <BR>socket_set_timeout($this->connection, 0, 250000);  <br><br>$greeting = $this->get_data();  <br><br>if(is_resource($this->connection))  <BR>{  <BR>$this->status = 2;  <BR>return $this->auth ? $this->ehlo() : $this->helo();  <BR>}  <BR>else  <BR>{  <BR>$this->errors[] = ‘Failed to connect to server: ‘.$errstr;  <BR>return FALSE;  <BR>}  <BR>}  <BR>}  <br><br>/**  <BR>* 参数为数组  <BR>* recipients 接收人的数组  <BR>* from 发件人的地址,也将作为回复地址  <BR>* headers 头部信息的数组  <BR>* body 邮件的主体  <BR>*/  <br><br>function send($params = array())  <BR>{  <br><br>foreach($params as $key => $value)  <BR>{  <BR>$this->set($key, $value);  <BR>}  <br><br>if($this->is_connected())  <BR>{  <BR>// 服务器是否需要验证  <BR>if($this->auth)  <BR>{  <BR>if(!$this->auth()) return FALSE;  <BR>}  <br><br>$this->mail($this->from);  <br><br>if(is_array($this->recipients))  <BR>{  <BR>foreach($this->recipients as $value)  <BR>{  <BR>$this->rcpt($value);  <BR>}  <BR>}  <BR>else  <BR>{  <BR>$this->rcpt($this->recipients);  <BR>}  <br><br>if(!$this->data()) return FALSE;  <br><br>$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers)));  <BR>$body = str_replace(CRLF.'.', CRLF.'..', $this->body);  <BR>$body = $body[0] == ‘.' ? ‘.'.$body : $body;  <br><br>$this->send_data($headers);  <BR>$this->send_data(”);  <BR>$this->send_data($body);  <BR>$this->send_data('.');  <br><br>return (substr(trim($this->get_data()), 0, 3) === ‘250′);  <BR>}  <BR>else  <BR>{  <BR>$this->errors[] = ‘Not connected!';  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function helo()  <BR>{  <BR>if(is_resource($this->connection)  <BR>AND $this->send_data('HELO ‘.$this->helo)  <BR>AND substr(trim($error = $this->get_data()), 0, 3) === ‘250′ )  <BR>{  <BR>return TRUE;  <br><br>}  <BR>else  <BR>{  <BR>$this->errors[] = ‘HELO command failed, output: ‘ . trim(substr(trim($error),3));  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function ehlo()  <BR>{  <BR>if(is_resource($this->connection)  <BR>AND $this->send_data('EHLO ‘.$this->helo)  <BR>AND substr(trim($error = $this->get_data()), 0, 3) === ‘250′ )  <BR>{  <BR>return TRUE;  <BR>}  <BR>else  <BR>{  <BR>$this->errors[] = ‘EHLO command failed, output: ‘ . trim(substr(trim($error),3));  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function auth()  <BR>{  <BR>if(is_resource($this->connection)  <BR>AND $this->send_data('AUTH LOGIN')  <BR>AND substr(trim($error = $this->get_data()), 0, 3) === ‘334′  <BR>AND $this->send_data(base64_encode($this->user)) // Send username  <BR>AND substr(trim($error = $this->get_data()),0,3) === ‘334′  <BR>AND $this->send_data(base64_encode($this->pass)) // Send password  <BR>AND substr(trim($error = $this->get_data()),0,3) === ‘235′ )  <BR>{  <BR>return TRUE;  <BR>}  <BR>else  <BR>{  <BR>$this->errors[] = ‘AUTH command failed: ‘ . trim(substr(trim($error),3));  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function mail($from)  <BR>{  <br><br>if($this->is_connected()  <BR>AND $this->send_data('MAIL FROM:')  <BR>AND substr(trim($this->get_data()), 0, 2) === ‘250′ )  <BR>{  <BR>return TRUE;  <BR>}  <BR>else  <BR>{  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function rcpt($to)  <BR>{  <BR>if($this->is_connected()  <BR>AND $this->send_data('RCPT TO:')  <BR>AND substr(trim($error = $this->get_data()), 0, 2) === ‘25′ )  <BR>{  <BR>return TRUE;  <BR>}  <BR>else  <BR>{  <BR>$this->errors[] = trim(substr(trim($error), 3));  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function data()  <BR>{  <br><br>if($this->is_connected()  <BR>AND $this->send_data('DATA')  <BR>AND substr(trim($error = $this->get_data()), 0, 3) === ‘354′ )  <BR>{  <BR>return TRUE;  <BR>}  <BR>else  <BR>{  <BR>$this->errors[] = trim(substr(trim($error), 3));  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function is_connected()  <BR>{  <BR>return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));  <BR>}  <br><br>function send_data($data)  <BR>{  <BR>if(is_resource($this->connection))  <BR>{  <BR>if($this->debug)  <BR>echo nl2br($data.CRLF);  <BR>return fwrite($this->connection, $data.CRLF, strlen($data)+2);  <BR>}  <BR>else  <BR>{  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function &get_data()  <BR>{  <br><br>$return = ”;  <BR>$line = ”;  <br><br>if(is_resource($this->connection))  <BR>{  <BR>while(strpos($return, CRLF) === FALSE OR substr($line,3,1) !== ‘ ‘)  <BR>{  <BR>$line = fgets($this->connection, 512);  <BR>$return .= $line;  <BR>}  <BR>if($this->debug===true)  <BR>echo nl2br($return.CRLF);  <BR>return $return;  <br><br>}  <BR>else  <BR>{  <BR>return FALSE;  <BR>}  <BR>}  <br><br>function set($var, $value)  <BR>{  <BR>$this->$var = $value;  <BR>return TRUE;  <BR>}  <BR>} // End of class  <BR>?> <BR>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php a simple smtp class_php实例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址