php a simple smtp class_php实例

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 
?> 

时间: 2024-10-31 08:45:49

php a simple smtp class_php实例的相关文章

php中利用curl smtp发送邮件实例

$ telnet 邮箱SMTP服务地址 25 Trying 邮箱服务IP地址... Connected to 邮箱SMTP服务地址. Escape character is '^]'.  exchange邮箱服务器地址 Microsoft ESMTP MAIL Service ready at Sat, 2 Jun 2012 15:02:12 +0800 EHLO 127.0.0.1 -exchange邮箱服务器地址 Hello [邮箱服务IP地址] -SIZE -PIPELINING -DSN

JAVA必须使用类型的外层实例来分配限定?

问题描述 JAVA必须使用类型的外层实例来分配限定? package test; public class Simple { public static void main(String[] args) { int[]arry={3,56,46,33,112,32,48,45,21,88,64,32,7,88,64}; arrysort as= new arrysort(); arry=as.sort(arry); for(int i=0;i<arry.length;i++) { System.

在.NET 应用程序中用System.Web.Mail 发送电子邮件

web|程序 在.NET 应用程序中用System.Web.Mail 发送电子邮件 作者:Mark Strawmyer日期:February 9, 2004 -------------------------------------------------------------------------------- 欢迎来到 .NET Nuts & Bolts 栏目.在这个栏目中,我们将探讨怎样在应用中发送电子邮件.这将用到System.Web.Mail 名字空间中的类. 协作数据对象Wind

用System.Web.Mail发送电子邮件

web 作者:Mark Strawmyer 日期:February 9, 2004   欢迎来到 .NET Nuts & Bolts 栏目.在这个栏目中,我们将探讨怎样在应用中发送电子邮件.这将用到System.Web.Mail 名字空间中的类. 协作数据对象Windows 2000 协作数据对象 (CDOSYS) 是微软用来创建和发送基于标准的电子邮件信息的消息组件.它是 用与 Windows NT的协作数据对象(CDONTS) 的替代物. 尽管由于向后兼容的原因 CDONTS 已包含在 Wi

CodeIgniter使用smtp服务发送html邮件的方法_php实例

本文实例讲述了CodeIgniter使用smtp服务发送html邮件的方法.分享给大家供大家参考.具体如下: codeigniter 提供的email类,用于发送邮件, wiki地址: http://codeigniter.org.cn/user_guide/libraries/email.html 实际开发中遇到以下几个问题,总结一下: 1. wiki中说明是可以将配置文件单独提出来,email.php 放置到config文件夹下, 对于email.php 的配置,需要说明的几点: 1) 一般

.net SMTP发送Email实例(可带附件)

本文为大家详细介绍下.net SMTP发送Email同时可带附件的具体实现思路及代码,想实现的朋友可以参考下哈,希望对大家有所帮助   复制代码 代码如下: public static void sendEmail(string toAddress, string emailbody) { var fromAddress = ConfigurationManager.AppSettings["EmailAddress"]; string fromPassword = Configura

php中通过smtp发邮件的类,测试通过_php实例

smtp.php 复制代码 代码如下: <?php class smtp {     /* Public Variables */     var $smtp_port;     var $time_out;     var $host_name;     var $log_file;     var $relay_host;     var $debug;     var $auth;     var $user;     var $pass;     /* Private Variables

PHPMailer邮件类利用smtp.163.com发送邮件方法_php实例

第一步:需要下载PHPMailer文件包phpmailer-1.73.tar.gz 来自开源社区: http://phpmailer.sourceforge.net/ 第二步:确认你的服务器系统已经支持socket 如下图,通过phpinfo();查看是否支持sockets 如果没有这一项就请注意: socket 是属于PHP扩展部分,编译时必须给定一个用于./configure --enable-sockets 的配置选项. 第三步:把文件解压到你的web服务器目录下,调用类就可以了,说明:首

.net SMTP发送Email实例(可带附件)_实用技巧

复制代码 代码如下: public static void sendEmail(string toAddress, string emailbody) { var fromAddress = ConfigurationManager.AppSettings["EmailAddress"]; string fromPassword = ConfigurationManager.AppSettings["EmailPassword"].ToString(); const