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 相关文章推荐
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
Jul 12 PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
php实现通用的信用卡验证类
Mar 24 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
php-app开发接口加密详解
Apr 18 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 04 PHP
php日志函数error_log用法实例分析
Sep 23 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
PHP中关于php.ini参数优化详解
Feb 28 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 常用函数库和一些实用小技巧
2009/01/01 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
JS 控制非法字符的输入代码
2009/12/04 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
js读取cookie方法总结
2014/10/31 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
Python笔记之工厂模式
2019/11/20 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
Shein英国:女性时尚网上商店
2019/04/10 全球购物
介绍一下.net和Java的特点和区别
2012/09/26 面试题
项目专员岗位职责
2013/12/04 职场文书
公司财务自我评价分享
2013/12/17 职场文书
安全检查管理制度
2014/02/02 职场文书
人事科岗位职责范本
2014/03/02 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技