用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二分法在IP地址查询中的应用
Aug 12 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 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
Terran兵种介绍
2020/03/14 星际争霸
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
Vue.js用法详解
2017/11/13 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
django fernet fields字段加密实践详解
2019/08/12 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
自荐信格式的六要素
2013/09/21 职场文书
教师自我鉴定范文
2013/11/10 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
校庆筹备方案
2014/03/30 职场文书
毕业留言寄语大全
2014/04/10 职场文书
供电工程专业求职信
2014/08/09 职场文书
初中作文评语
2014/12/25 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android
利用js实现简单开关灯代码
2021/11/23 Javascript