用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之第二天
Oct 09 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
浅析php工厂模式
Nov 25 PHP
php实现mysql事务处理的方法
Dec 25 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
PHP常用文件操作函数和简单实例分析
Jun 03 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
YII框架模块化处理操作示例
Apr 26 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
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
python读写ini文件示例(python读写文件)
2014/03/25 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python探索之创建二叉树
2017/10/25 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
Python编写打字训练小程序
2019/09/26 Python
python实现图片上添加图片
2019/11/26 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
聊聊python中的循环遍历
2020/09/07 Python
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
外贸采购员岗位职责
2014/03/08 职场文书
和解协议书
2014/04/16 职场文书
2014年公司工作总结
2014/11/22 职场文书
win10清理dns缓存
2022/04/19 数码科技
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python