首页  >  文章  >  后端开发  >  php一个简单的smtp class_php实例

php一个简单的smtp class_php实例

WBOY
WBOY原创
2016-05-17 09:38:56918浏览
smtp.class.php
复制代码 代码如下:


define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE); 
define('SMTP_STATUS_CONNECTED', 2, TRUE); 

class smtp


var $connection; 
var $recipients; 
var $headers; 
var $超时; 
var $errors; 
var $status; 
var $body; 
var $from; 
var $host; 
var $port; 
var $helo; 
var $auth; 
var $user; 
var $pass; 
var $debug; 

/** 
* 参数为一个数组 
* host SMTP 服务器的主机 默认:localhost 
* port SMTP 服务器的端口 默认:25 
* helo 发送HELO命令的名称 默认:localhost 
* user SMTP 服务器的用户名 默认:空值 
* pass SMTP 服务器的登陆密码 默认:空值 
* timeout 连接超时的时间 默认:5 
* @return bool 
*/ 

函数 smtp($params = array()) 


if(!define('CRLF'))定义('CRLF',“ n”,真); 

$this->超时 = 5; 
$this->status = SMTP_STATUS_NOT_CONNECTED; 
$this->host = ‘localhost’; 
$this->端口 = 25; 
$this->auth = FALSE; 
$this->用户=”; 
$this->pass = ”; 
$this->errors = array(); 
$this->debug = false; 
foreach($params as $key => $value)

$this->$key = $value; 


$this->helo = $this->host; 

//如果没有设置用户名则不验证
$this->auth = (” == $this->user) ? 假:真; 


函数 connect($params = array()) 


if(!isset($this->status)) 

$obj = 新 smtp($params); 

if($obj->connect()) 

$obj->status = SMTP_STATUS_CONNECTED; 


返回 $obj; 


else 


$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->超时); 
socket_set_timeout($this->连接, 0, 250000); 

$greeting = $this->get_data(); 

if(is_resource($this->连接)) 

$this->status = 2; 
返回$this->auth? $this->ehlo():$this->helo(); 

else 

$this->errors[] = '无法连接到服务器:'.$errstr; 
返回假; 




/** 
* 参数为数组 
* recipients 接收人的数组 
* from 发件人的地址,也将作为回复地址 
* headers 头部信息的数组 
* body 邮件的主体 
*/ 

函数 send($params = array()) 


foreach($params as $key => $value)

$this->set($key, $value); 


if($this->is_connected()) 

// 服务器是否需要验证
if($this->auth) 
{
if(!$this->auth()) 返回 FALSE; 


$this->mail($this->from); 

if(is_array($this->recipients)) 

foreach($this->recipients as $value) 

$this->rcpt (价值); 


else 

$this->rcpt($this->recipients); 


if(!$this->data()) 返回 FALSE; 

$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers))); 
$body = str_replace(CRLF.'.', CRLF.'..', $this->body); 
$body = $body[0] == ‘。’ ? '.'.$body : $body; 

$this->send_data($headers); 
$this->send_data(”); 
$this->send_data($body); 
$this->send_data('.'); 

return (substr(trim($this->get_data()), 0, 3) === ‘250′); 

else 

$this->errors[] = '未连接!'; 
返回假; 



function helo() 

if(is_resource($this->connection) 
AND $this->send_data('HELO ' .$this->helo) 
AND substr(trim($error = $this->get_data()), 0, 3) ==='250′ ) 

return TRUE; 


else 

$this->errors[] = 'HELO 命令失败,输出:''。 修剪(substr(修剪($错误),3)); 
返回假; 



函数 ehlo() 

if(is_resource($this->connection) 
AND $this->send_data('EHLO ' .$this->helo) 
AND substr(trim($error = $this->get_data()), 0, 3) ==='250′ ) 

return TRUE; 

else 

$this->errors[] = ‘EHLO 命令失败,输出:‘’。 修剪(substr(修剪($错误),3)); 
返回假; 



function auth() 

if(is_resource($this->connection) 
AND $this->send_data('AUTH LOGIN ') 
AND substr(trim($error = $this->get_data()), 0, 3) === '334′ 
AND $this->send_data(base64_encode($this->gt;) ;user)) // 发送用户名 
AND substr(trim($error = $this->get_data()),0,3) === '334′ 
AND $this->send_data( base64_encode($this->pass)) // 发送密码 
AND substr(trim($error = $this->get_data()),0,3) === '235′ ) 
{
返回 TRUE; 

else 

$this->errors[] = 'AUTH 命令失败: ' 。 修剪(substr(修剪($错误),3)); 
返回假; 



函数邮件($from) 


if($this->is_connected() 
AND $this->send_data ('MAIL FROM:') 
AND substr(trim($this->get_data()), 0, 2) ​​=== '250′ ) 
{
返回 TRUE; 

否则

返回 FALSE; 



函数 rcpt($to) 

if($this->is_connected() 
AND $this->send_data('RCPT) TO:') 
AND substr(trim($error = $this->get_data()), 0, 2) ​​=== '25′ ) 
{
返回 TRUE; 

else 

$this->errors[] = trim(substr(trim($error), 3)); 
返回假; 



函数 data() 


if($this->is_connected() 
AND $this->send_data(' DATA') 
AND substr(trim($error = $this->get_data()), 0, 3) === '354′ ) 

return TRUE; 

else 

$this->errors[] = trim(substr(trim($error), 3)); 
返回假; 



函数 is_connected() 

return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED)) ; 


函数 send_data($data) 

if(is_resource($this->connection)) 

if($this->debug ) 
echo nl2br($data.CRLF); 
return fwrite($this->connection, $data.CRLF, strlen($data) 2); 

否则

返回 FALSE; 



函数&get_data()


$return = ”; 
$line = ”; 

if(is_resource($this->connection)) 

while(strpos($return, CRLF) === FALSE OR substr($line,3,1) != = ' ') 

$line = fgets($this->connection, 512); 
$return .= $line; 

if($this->debug===true) 
echo nl2br($return.CRLF); 
返回$return; 


否则

返回 FALSE; 



函数集($var, $value) 

$this->$var = $value; 
返回 TRUE; 

} // 课程结束
?>; 

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn