用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 相关文章推荐
转PHP手册及PHP编程标准
Dec 17 PHP
PHP 定界符 使用技巧
Jun 14 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
Drupal7中常用的数据库操作实例
Mar 02 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
php生成短域名函数
Mar 23 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 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
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
php面向对象值单例模式
2016/05/03 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
Yii全局函数用法示例
2017/01/22 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
img标签中onerror用法
2009/08/13 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
简单了解python的一些位运算技巧
2019/07/13 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
python实现复制文件到指定目录
2019/10/16 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
诚信贷款承诺书
2014/05/30 职场文书
英语辞职信怎么写
2015/02/28 职场文书
小学教学工作总结2015
2015/05/13 职场文书
小学生读书笔记
2015/07/01 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
JavaScript设计模式之原型模式详情
2022/06/21 Javascript