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 MySQL与分页效率
Jun 04 PHP
php smarty的预保留变量总结
Dec 04 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
php实现的用户查询类实例
Jun 18 PHP
php三种实现多线程类似的方法
Oct 30 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP基于curl模拟post提交json数据示例
Jun 22 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 PHP
phpstudy2020搭建站点的实现示例
Oct 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
ajax在joomla中的原生态应用代码
2012/07/19 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
js页面跳转的常用方法整理
2013/10/18 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
Python网络爬虫实例讲解
2016/04/28 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
财务人员个人自荐信范文
2013/09/26 职场文书
矫正人员思想汇报
2014/01/08 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
城市创卫标语
2014/06/17 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
导游词之杭州西湖
2019/09/19 职场文书