加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php a simple smtp class

发布时间:2020-12-13 05:21:49 所属栏目:PHP教程 来源:网络整理
导读:smtp.class.php 代码如下: define('SMTP_STATUS_CONNECTED',2,TRUE); classsmtp { var$connection; var$recipients; var$headers; var$timeout; var$errors; var$status; var$body; var$from; var$host; var$port; var$helo; var$auth; var$user; var$pass;

smtp.class.php


代码如下:
define('SMTP_STATUS_CONNECTED',2,TRUE); classsmtp
{ var$connection;
var$recipients;
var$headers;
var$timeout;
var$errors;
var$status;
var$body;
var$from;
var$host;
var$port;
var$helo;
var$auth;
var$user;
var$pass;
var$debug; /**
*参数为一个数组
*hostSMTP服务器的主机默认:localhost
*portSMTP服务器的端口默认:25
*helo发送HELO命令的名称默认:localhost
*userSMTP服务器的用户名默认:空值
*passSMTP服务器的登陆密码默认:空值
*timeout连接超时的时间默认:5
*@returnbool
*/ functionsmtp($params=array())
{ if(!defined('CRLF'))define('CRLF',“rn”,TRUE); $this->timeout=5;
$this->status=SMTP_STATUS_NOT_CONNECTED;
$this->host=‘localhost';
$this->port=25;
$this->auth=FALSE;
$this->user=”;
$this->pass=”;
$this->errors=array();
$this->debug=false;
foreach($paramsas$key=>$value)
{
$this->$key=$value;
} $this->helo=$this->host; //如果没有设置用户名则不验证
$this->auth=(”==$this->user)?FALSE:TRUE;
} functionconnect($params=array())
{ if(!isset($this->status))
{
$obj=newsmtp($params); if($obj->connect())
{
$obj->status=SMTP_STATUS_CONNECTED;
} return$obj; }
else
{ $this->connection=fsockopen($this->host,$this->port,$errno,$errstr,$this->timeout);
socket_set_timeout($this->connection,250000); $greeting=$this->get_data(); if(is_resource($this->connection))
{
$this->status=2;
return$this->auth?$this->ehlo():$this->helo();
}
else
{
$this->errors[]=‘Failedtoconnecttoserver:‘.$errstr;
returnFALSE;
}
}
} /**
*参数为数组
*recipients接收人的数组
*from发件人的地址,也将作为回复地址
*headers头部信息的数组
*body邮件的主体
*/ functionsend($params=array())
{ foreach($paramsas$key=>$value)
{
$this->set($key,$value);
} if($this->is_connected())
{
//服务器是否需要验证
if($this->auth)
{
if(!$this->auth())returnFALSE;
} $this->mail($this->from); if(is_array($this->recipients))
{
foreach($this->recipientsas$value)
{
$this->rcpt($value);
}
}
else
{
$this->rcpt($this->recipients);
} if(!$this->data())returnFALSE; $headers=str_replace(CRLF.'.',CRLF.'..',trim(implode(CRLF,$this->headers)));
$body=str_replace(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()),3)===‘250′);
}
else
{
$this->errors[]=‘Notconnected!';
returnFALSE;
}
} functionhelo()
{
if(is_resource($this->connection)
AND$this->send_data('HELO‘.$this->helo)
ANDsubstr(trim($error=$this->get_data()),3)===‘250′)
{
returnTRUE; }
else
{
$this->errors[]=‘HELOcommandfailed,output:‘.trim(substr(trim($error),3));
returnFALSE;
}
} functionehlo()
{
if(is_resource($this->connection)
AND$this->send_data('EHLO‘.$this->helo)
ANDsubstr(trim($error=$this->get_data()),3)===‘250′)
{
returnTRUE;
}
else
{
$this->errors[]=‘EHLOcommandfailed,3));
returnFALSE;
}
} functionauth()
{
if(is_resource($this->connection)
AND$this->send_data('AUTHLOGIN')
ANDsubstr(trim($error=$this->get_data()),3)===‘334′
AND$this->send_data(base64_encode($this->user))//Sendusername
ANDsubstr(trim($error=$this->get_data()),3)===‘334′
AND$this->send_data(base64_encode($this->pass))//Sendpassword
ANDsubstr(trim($error=$this->get_data()),3)===‘235′)
{
returnTRUE;
}
else
{
$this->errors[]=‘AUTHcommandfailed:‘.trim(substr(trim($error),3));
returnFALSE;
}
} functionmail($from)
{ if($this->is_connected()
AND$this->send_data('MAILFROM:<'.$from.'>')
ANDsubstr(trim($this->get_data()),2)===‘250′)
{
returnTRUE;
}
else
{
returnFALSE;
}
} functionrcpt($to)
{
if($this->is_connected()
AND$this->send_data('RCPTTO:<'.$to.'>')
ANDsubstr(trim($error=$this->get_data()),2)===‘25′)
{
returnTRUE;
}
else
{
$this->errors[]=trim(substr(trim($error),3));
returnFALSE;
}
} functiondata()
{ if($this->is_connected()
AND$this->send_data('DATA')
ANDsubstr(trim($error=$this->get_data()),3)===‘354′)
{
returnTRUE;
}
else
{
$this->errors[]=trim(substr(trim($error),3));
returnFALSE;
}
} functionis_connected()
{
return(is_resource($this->connection)AND($this->status===SMTP_STATUS_CONNECTED));
} functionsend_data($data)
{
if(is_resource($this->connection))
{
if($this->debug)
echonl2br($data.CRLF);
returnfwrite($this->connection,$data.CRLF,strlen($data)+2);
}
else
{
returnFALSE;
}
} function&get_data()
{ $return=”;
$line=”; if(is_resource($this->connection))
{
while(strpos($return,CRLF)===FALSEORsubstr($line,3,1)!==‘‘)
{
$line=fgets($this->connection,512);
$return.=$line;
}
if($this->debug===true)
echonl2br($return.CRLF);
return$return; }
else
{
returnFALSE;
}
} functionset($var,$value)
{
$this->$var=$value;
returnTRUE;
}
}//Endofclass
?>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读