php win下Socket方式发邮件类


Posted in PHP onAugust 21, 2009
<?php 
/* 
* php smtp发送邮件Scoket类 
* ZhozPhpSmtpSendMail.php 
* Created on 2008/09/02 zhoz.com 
* @author zhoz 
* v 1.72 update 2008/09/26 zhoz.Com 
*/ 
class ZhozPhpSmtpSendMail { 
//您的SMTP 服务器供应商,可以是域名或IP地址 
var $smtp = ""; 
//SMTP需要要身份验证设值为 1, 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证,如不清楚请与你的smtp 服务商联系。 
var $check = 1; 
//您的email帐号名称 
var $username = ""; 
//您的email密码 
var $password = ""; 
//此email 必需是发信服务器上的email 
var $s_from = ""; 
/* 
* 功能:发信初始化设置 
* $from 你的发信?衿魃系挠氏? 
* $password 你的邮箱密码 
* $smtp 您的SMTP 服务器供应商,可以是域名或IP地址 
* $check SMTP需要要身份验证设值为 1 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证 
*/ 
function ZhozPhpSmtpSendMail ( $from, $password, $smtp, $check = 1 ) { 
if( preg_match("/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/", $from ) ) { 
$this->username = substr( $from, 0, strpos( $from , "@" ) ); 
$this->password = $password; 
$this->smtp = $smtp ? $smtp : $this->smtp; 
$this->check = $check; 
$this->s_from = $from; 
} 
} 
/* 
* 功能:发送邮件 
* $to 目标邮箱 
* $from 来源邮箱 
* $subject 邮件标题 
* $message 邮件内容 
*/ 
function zhoz_send ($to, $from, $subject, $message) { 
//连接服务器 
$fp = fsockopen ( $this->smtp, 25, $errno, $errstr, 60); 
if (!$fp ) return "联接服务器失败".__LINE__; 
set_socket_blocking($fp, true ); 
$lastmessage=fgets($fp,512); 
if ( substr($lastmessage,0,3) != 220 ) return "错误信息1:$lastmessage".__LINE__; 
//HELO 
$yourname = "YOURNAME"; 
if($this->check == "1") $lastact="EHLO ".$yourname."\r\n"; 
else $lastact="HELO ".$yourname."\r\n"; 
fputs($fp, $lastact); 
$lastmessage == fgets($fp,512); 
if (substr($lastmessage,0,3) != 220 ) return "错误信息2:$lastmessage".__LINE__; 
while (true) { 
$lastmessage = fgets($fp,512); 
if ( (substr($lastmessage,3,1) != "-") or (emptyempty($lastmessage)) ) 
break; 
} 
//身份验证 
if ($this->check=="1") { 
//验证开始 
$lastact="AUTH LOGIN"."\r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 334) return "错误信息3:$lastmessage".__LINE__; 
//用户姓名 
$lastact=base64_encode($this->username)."\r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 334) return "错误信息4:$lastmessage".__LINE__; 
//用户密码 
$lastact=base64_encode($this->password)."\r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != "235") return "错误信息5:$lastmessage".__LINE__; 
} 
//FROM: 
$lastact="MAIL FROM: <". $this->s_from . ">\r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 250) return "错误信息6:$lastmessage".__LINE__; 
//TO: 
$lastact="RCPT TO: <". $to ."> \r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 250) return "错误信息7:$lastmessage".__LINE__; 
//DATA 
$lastact="DATA\r\n"; 
fputs($fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 354) return "错误信息8:$lastmessage".__LINE__; 
//处理Subject头 
$head="Subject: $subject\r\n"; 
$message = $head."\r\n".$message; 
//处理From头 
$head="From: $from\r\n"; 
$message = $head.$message; 
//处理To头 
$head="To: $to\r\n"; 
$message = $head.$message; 
//加上结束串 
$message .= "\r\n.\r\n"; 
//发送信息 
fputs($fp, $message); 
$lastact="QUIT\r\n"; 
fclose($fp); 
error_log("send over------->ok!!", 0); 
return true; 
} 
} 
?> 
<?php 
/* 
* php smtp发送邮件Scoket类 
* ZhozPhpSmtpSendMail.php 
* Created on 2008/09/02 zhoz.com 
* @author zhoz 
* v 1.72 update 2008/09/26 zhoz.Com 
*/ 
class ZhozPhpSmtpSendMail { 
//您的SMTP 服务器供应商,可以是域名或IP地址 
var $smtp = ""; 
//SMTP需要要身份验证设值为 1, 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证,如不清楚请与你的smtp 服务商联系。 
var $check = 1; 
//您的email帐号名称 
var $username = ""; 
//您的email密码 
var $password = ""; 
//此email 必需是发信服务器上的email 
var $s_from = ""; 
/* 
* 功能:发信初始化设置 
* $from 你的发信服务器上的邮箱 
* $password 你的邮箱密码 
* $smtp 您的SMTP 服务器供应商,可以是域名或IP地址 
* $check SMTP需要要身份验证设值为 1 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证 
*/ 
function ZhozPhpSmtpSendMail ( $from, $password, $smtp, $check = 1 ) { 
if( preg_match("/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/", $from ) ) { 
$this->username = substr( $from, 0, strpos( $from , "@" ) ); 
$this->password = $password; 
$this->smtp = $smtp ? $smtp : $this->smtp; 
$this->check = $check; 
$this->s_from = $from; 
} 
} 
/* 
* 功能:发送邮件 
* $to 目标邮箱 
* $from 来源邮箱 
* $subject 邮件标题 
* $message 邮件内容 
*/ 
function zhoz_send ($to, $from, $subject, $message) { 
//连接服务器 
$fp = fsockopen ( $this->smtp, 25, $errno, $errstr, 60); 
if (!$fp ) return "联接服务器失败".__LINE__; 
set_socket_blocking($fp, true ); 
$lastmessage=fgets($fp,512); 
if ( substr($lastmessage,0,3) != 220 ) return "错误信息1:$lastmessage".__LINE__; 
//HELO 
$yourname = "YOURNAME"; 
if($this->check == "1") $lastact="EHLO ".$yourname."\r\n"; 
else $lastact="HELO ".$yourname."\r\n"; 
fputs($fp, $lastact); 
$lastmessage == fgets($fp,512); 
if (substr($lastmessage,0,3) != 220 ) return "错误信息2:$lastmessage".__LINE__; 
while (true) { 
$lastmessage = fgets($fp,512); 
if ( (substr($lastmessage,3,1) != "-") or (empty($lastmessage)) ) 
break; 
} 
//身份验证 
if ($this->check=="1") { 
//验证开始 
$lastact="AUTH LOGIN"."\r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 334) return "错误信息3:$lastmessage".__LINE__; 
//用户姓名 
$lastact=base64_encode($this->username)."\r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 334) return "错误信息4:$lastmessage".__LINE__; 
//用户密码 
$lastact=base64_encode($this->password)."\r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != "235") return "错误信息5:$lastmessage".__LINE__; 
} 
//FROM: 
$lastact="MAIL FROM: <". $this->s_from . ">\r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 250) return "错误信息6:$lastmessage".__LINE__; 
//TO: 
$lastact="RCPT TO: <". $to ."> \r\n"; 
fputs( $fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 250) return "错误信息7:$lastmessage".__LINE__; 
//DATA 
$lastact="DATA\r\n"; 
fputs($fp, $lastact); 
$lastmessage = fgets ($fp,512); 
if (substr($lastmessage,0,3) != 354) return "错误信息8:$lastmessage".__LINE__; 
//处理Subject头 
$head="Subject: $subject\r\n"; 
$message = $head."\r\n".$message; 
//处理From头 
$head="From: $from\r\n"; 
$message = $head.$message; 
//处理To头 
$head="To: $to\r\n"; 
$message = $head.$message; 
//加上结束串 
$message .= "\r\n.\r\n"; 
//发送信息 
fputs($fp, $message); 
$lastact="QUIT\r\n"; 
fclose($fp); 
error_log("send over------->ok!!", 0); 
return true; 
} 
} 
?> 
测试方法一样。 
运行代码查看代码复制代码打印关于 
<?php 
/** 
* ZhozPhpSmtpSendMail.php 
* Created on 2008/09/02 zhoz.com 
* php smtp发送邮件类 
* 代替mail():因为它报错,我又不想 
*/ 
// 这里配置发信服务器信息,如果不改也可以正常使用: 
$from = 'zhoz@zhoz.com'; // 你的发信服务器上的邮箱 
$password = 'zhoz'; // 你的邮箱密码 
$smtp = 'smtp.zhoz.com'; // 您的SMTP 服务器供应商,可以是域名或IP地址 
// 类初始化 
$zhoz_obj = new ZhozPhpSmtpSendMail($from, $password, $smtp); 
// 发送开始 
$status = $zhoz_obj->zhoz_send("zhoz008@126.com", "zhoz@zhoz.com", "subject is zhoz", "body is zhoz.com"); 
if($status) { 
echo $status; 
echo "no---------"; 
} else { 
echo "send ok-----------------!"; 
die; 
} 
// 结果当然是:send ok-----------------! 
?>
PHP 相关文章推荐
php木马攻击防御之道
Mar 24 PHP
php 保留字列表
Oct 04 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
php计算一个文件大小的方法
Mar 30 PHP
PHP处理二进制数据的实现方法
Jun 13 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
PHP正则删除HTML代码中宽高样式的方法
Jun 12 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
Discuz 模板语句分析及知识技巧
Aug 21 #PHP
php 分页原理详解
Aug 21 #PHP
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
Aug 21 #PHP
PHP 各种排序算法实现代码
Aug 20 #PHP
谈PHP生成静态页面分析 模板+缓存+写文件
Aug 17 #PHP
数据库查询记录php 多行多列显示
Aug 15 #PHP
PHP 实现多服务器共享 SESSION 数据
Aug 15 #PHP
You might like
PHP高级OOP技术演示
2009/08/27 PHP
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
python批量生成本地ip地址的方法
2015/03/23 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
python实现感知器算法详解
2017/12/19 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
python日志logging模块使用方法分析
2019/05/23 Python
Python3进制之间的转换代码实例
2019/08/24 Python
python 中xpath爬虫实例详解
2019/08/26 Python
挪威手表购物网站:Klokker
2016/09/19 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
2014全国两会大学生学习心得体会
2014/03/10 职场文书
聚美优品广告词改编
2014/03/14 职场文书
专职安全员岗位职责
2015/04/11 职场文书
小学运动会入场口号
2015/12/24 职场文书
JavaScript实现两个数组的交集
2022/03/25 Javascript
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python