用Socket发送电子邮件(利用需要验证的SMTP服务器)


Posted in PHP onOctober 09, 2006

<?

*  名称:用Socket发送电子邮件
*  描述:本类实现了直接使用需要验证的SMTP服务器直接发送邮件,参考文章《用Socket发送电子邮件》作者:limodou
*        此文章比较早,他是用不用验证SMTP服务器发送邮件,现在基本上SMTP服务器都需要验证了,所以这个文章里的类
          意义也不是很大!同时参考了[RFC 1869]和PHP手册!!和上文还有不同的是我用的不是fsockopen()函数
          具体你自己看吧!!我刚刚测试通过了,很爽!!
          其实把这个类再改写一下就可以直接发送带附件的邮件了,期待。。。我过几天给大家写出来!
          我刚刚调试通过,如果你不恶意去捉弄这个程序,他还是很听话的,过些日子我会对他完善加上发送附件的功能!!

即使你的虚拟主机不支持MAIL函数,现在也不怕了!快快试试这个吧!

 
请尊重别人的劳动成功,请保留此版权信息,谢谢!
作者:小露珠3.3  ,欢迎和我联系交流PHP QQ6550382 
MAIL:cleverzhang@tom.com
*/
set_time_limit(120);
class smtp_mail
{
var $host;          //主机
var $port;          //端口 一般为25
var $user;          //SMTP认证的帐号
var $pass;          //认证密码
var $debug = false;   //是否显示和服务器会话信息?
var $conn;
var $result_str;      //结果
var $in;          //客户机发送的命令
var $from;          //源信箱
var $to;          //目标信箱
var $subject;         //主题
var $body;          //内容
function smtp_mail($host,$port,$user,$pass,$debug=false)
{
$this->host   = $host;
$this->port   = $port;
$this->user   = base64_encode($user);
$this->pass   = base64_encode($pass);
$this->debug  = $debug;
$this->socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);  //具体用法请参考手册
if($this->socket)
{
$this->result_str  =  "创建SOCKET:".socket_strerror(socket_last_error());
$this->debug_show($this->result_str);
}
else
{
exit("初始化失败,请检查您的网络连接和参数");
}
$this->conn = socket_connect($this->socket,$this->host,$this->port);
if($this->conn)
{
$this->result_str  =  "创建SOCKET连接:".socket_strerror(socket_last_error());
$this->debug_show($this->result_str);
}
else
{
exit("初始化失败,请检查您的网络连接和参数");
}
$this->result_str = "服务器应答:<font color=#cc0000>".socket_read ($this->socket, 1024)."</font>";
$this->debug_show($this->result_str);

}
function debug_show($str)
{
if($this->debug)
{
echo $str."<p>\r\n";
}
}
function send($from,$to,$subject,$body)
{
if($from == "" || $to == "")
{
exit("请输入信箱地址");
}
if($subject == "") $sebject = "无标题";
if($body    == "") $body    = "无内容";
$this->from     =  $from;
$this->to       =  $to;
$this->subject  =  $subject;
$this->body     =  $body;

$All          = "From:".$this->from."\n";
$All          .= "To:".$this->to."\n";
$All          .= "Subject:".$this->subject."\n";
$All          .= $this->body;
/*
  如过把$All的内容再加处理,就可以实现发送MIME邮件了
  不过还需要加很多程序
*/

//以下是和服务器会话
$this->in       =  "EHLO HELO\r\n";
$this->docommand();

$this->in       =  "AUTH LOGIN\r\n";
$this->docommand();

$this->in       =  $this->user."\r\n";
$this->docommand();

$this->in       =  $this->pass."\r\n";
$this->docommand();

$this->in       =  "MAIL FROM:".$this->from."\r\n";
$this->docommand();

$this->in       =  "RCPT TO:".$this->to."\r\n";
$this->docommand();

$this->in       =  "DATA\r\n";
$this->docommand();

$this->in       =  $All."\r\n.\r\n";
$this->docommand();

$this->in       =  "QUIT\r\n";
$this->docommand();

//结束,关闭连接

 

}
function docommand()
{
socket_write ($this->socket, $this->in, strlen ($this->in));
$this->debug_show("客户机命令:".$this->in);
$this->result_str = "服务器应答:<font color=#cc0000>".socket_read ($this->socket, 1024)."</font>";
$this->debug_show($this->result_str);
}
}
//这个是我做的测试,我用的是smtp.163.com,那你的信箱也必须是163.com的,要不人家不让你发!!
//你用这个类的时候你修改成你自己的信箱就可以了
$smtp  =   new smtp_mail("smtp.163.com","25","你的163.com的帐号","你的密码");
//如果你需要显示会话信息,请将上面的修改成
//$smtp  =   new smtp_mail("smtp.163.com","25","你的163.com的帐号","你的密码",true);
$smtp->send("你的163.com的帐号@163.com","目标地址","你好","你好");
?>

PHP 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
基于php常用正则表达式的整理汇总
Jun 08 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
php格式输出文件var_export函数实例
Nov 15 PHP
php面象对象数据库操作类实例
Dec 02 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
php反射类ReflectionClass用法分析
May 12 PHP
php简单统计中文个数的方法
Sep 30 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 PHP
用PHP实现登陆验证码(类似条行码状)
Oct 09 #PHP
用PHP创建PDF中文文档
Oct 09 #PHP
PHP与javascript对多项选择的处理
Oct 09 #PHP
3
Oct 09 #PHP
example2.php
Oct 09 #PHP
对盗链说再见...
Oct 09 #PHP
PHP出错界面
Oct 09 #PHP
You might like
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
用javascript实现画板的代码
2007/09/05 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python学习思维导图(必看篇)
2017/06/26 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python切片操作深入详解
2018/07/27 Python
python实现的自动发送消息功能详解
2019/08/15 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
校长岗位职责
2013/11/26 职场文书
自我评价怎么写正确呢?
2013/12/02 职场文书
纠风工作实施方案
2014/03/15 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
企业人事任命书
2014/06/05 职场文书
农村文化活动总结
2014/08/28 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
草房子读书笔记
2015/06/29 职场文书
七年级语文教学反思
2016/03/03 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python
mysql数据库隔离级别详解
2022/06/16 MySQL