php a simple smtp class

2015-01-24信息快讯网
smtp.class.php
<?php   

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

class smtp  
{  

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;  

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

function smtp($params = array())  
{  

if(!defined('CRLF')) define('CRLF', “\r\n”, 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($params as $key => $value)  
{  
$this->$key = $value;  
}  

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

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

function connect($params = array())  
{  

if(!isset($this->status))  
{  
$obj = new smtp($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, 0, 250000);  

$greeting = $this->get_data();  

if(is_resource($this->connection))  
{  
$this->status = 2;  
return $this->auth ? $this->ehlo() : $this->helo();  
}  
else  
{  
$this->errors[] = ‘Failed to connect to server: ‘.$errstr;  
return FALSE;  
}  
}  
}  

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

function send($params = array())  
{  

foreach($params as $key => $value)  
{  
$this->set($key, $value);  
}  

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

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

if(is_array($this->recipients))  
{  
foreach($this->recipients as $value)  
{  
$this->rcpt($value);  
}  
}  
else  
{  
$this->rcpt($this->recipients);  
}  

if(!$this->data()) return 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[] = ‘Not connected!';  
return FALSE;  
}  
}  

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 command failed, output: ‘ . trim(substr(trim($error),3));  
return FALSE;  
}  
}  

function 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 command failed, output: ‘ . trim(substr(trim($error),3));  
return FALSE;  
}  
}  

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->user)) // Send username  
AND substr(trim($error = $this->get_data()),0,3) === ‘334′  
AND $this->send_data(base64_encode($this->pass)) // Send password  
AND substr(trim($error = $this->get_data()),0,3) === ‘235′ )  
{  
return TRUE;  
}  
else  
{  
$this->errors[] = ‘AUTH command failed: ‘ . trim(substr(trim($error),3));  
return FALSE;  
}  
}  

function mail($from)  
{  

if($this->is_connected()  
AND $this->send_data('MAIL FROM:<'.$from.'>')  
AND substr(trim($this->get_data()), 0, 2) === ‘250′ )  
{  
return TRUE;  
}  
else  
{  
return FALSE;  
}  
}  

function rcpt($to)  
{  
if($this->is_connected()  
AND $this->send_data('RCPT TO:<'.$to.'>')  
AND substr(trim($error = $this->get_data()), 0, 2) === ‘25′ )  
{  
return TRUE;  
}  
else  
{  
$this->errors[] = trim(substr(trim($error), 3));  
return FALSE;  
}  
}  

function 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));  
return FALSE;  
}  
}  

function is_connected()  
{  
return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));  
}  

function send_data($data)  
{  
if(is_resource($this->connection))  
{  
if($this->debug)  
echo nl2br($data.CRLF);  
return fwrite($this->connection, $data.CRLF, strlen($data)+2);  
}  
else  
{  
return FALSE;  
}  
}  

function &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 $return;  

}  
else  
{  
return FALSE;  
}  
}  

function set($var, $value)  
{  
$this->$var = $value;  
return TRUE;  
}  
} // End of class  
?> 

php addslashes和mysql_real_escape_string
PHP has encountered an Access Violation 错误的解决方法
PHP simple_html_dom.php+正则 采集文章代码
PHP strtotime函数详解
phpmyadmin导入(import)文件限制的解决办法
Asp.net 文本框全选的实现
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
MYSQL 小技巧 -- LAST_INSERT_ID
php+javascript的日历控件
基于HTTP长连接的"服务器推"技术的php 简易聊天室
php_xmlhttp 乱码问题解决方法
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
php Http_Template_IT类库进行模板替换
php auth_http类库进行身份效验
PHPMailer邮件类利用smtp.163.com发送邮件方法
php下使用SMTP发邮件的代码
利用PHP制作简单的内容采集器的代码
PHP 文件上传进度条的两种实现方法的代码
php中ob(Output Buffer 输出缓冲)函数使用方法
在普通HTTP上安全地传输密码
PHP+FLASH实现上传文件进度条相关文件 下载
解决php中Cannot send session cache limiter 的问题的方法
Linux下ZendOptimizer的安装与配置方法
ASP和PHP都是可以删除自身的
一篇入门的php Class 文章
推荐一篇入门级的Class文章
php中的实现trim函数代码
用PHP 快速生成 Flash 动画的方法
用PHP实现Ftp用户的在线管理的代码
发布一个用PHP fsockopen写的HTTP下载的类
PHP中HTTP方式下的Gzip压缩传输方法举偶
php中通过smtp发邮件的类,测试通过
smtp邮件发送一例
在php中取得image按钮传递的name值
©2014-2024 dbsqp.com