php 用sock技术发送邮件的函数


Posted in PHP onJuly 21, 2007

使用sock技术发邮件,无需服务器支持。速度快!! 

function send_mail($to,$subject,$body)   
{   
/////////////Smtp信息,可以修改成你的,//////////   
   $loc_host = "longbill";        //发信计算机名,可随意   
  $smtp_acc = "longbill.mail";   //Smtp认证的用户名,   
  $smtp_pass = "longbill";         //Smtp认证的密码,   
  $smtp_host = "smtp.163.com";     //SMTP服务器地址,   
  $from = "longbill.mail@163.com"; //要与smtp信息对应 ,否则会失败   
/////////////Smtp信息完//////////////////////////////////    
  $headers = "Content-Type: text/plain; charset=\"gb2312\"\r\nContent-Transfer-Encoding: base64";   
  $lb="\r\n";                    //linebreak   
  $hdr = explode($lb,$headers);  //解析后的hdr   
  if($body)   
  {   
    $bdy = preg_replace("/^\./","..",explode($lb,$body));   
  }//解析后的Body   
  $smtp = array(   
  //1、EHLO,期待返回220或者250   
  array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),   
  //2、发送Auth Login,期待返回334   
  array("AUTH LOGIN".$lb,"334","AUTH error:"),   
  //3、发送经过Base64编码的用户名,期待返回334   
  array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),   
  //4、发送经过Base64编码的密码,期待返回235   
  array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : "));   
 //5、发送Mail From,期待返回250   
 $smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL FROM error: ");   
 //6、发送Rcpt To。期待返回250   
 $smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO error: ");   
 //7、发送DATA,期待返回354   
 $smtp[] = array("DATA".$lb,"354","DATA error: ");   
 //8.0、发送From   
 $smtp[] = array("From: ".$from.$lb,"","");   
 //8.2、发送To   
 $smtp[] = array("To: ".$to.$lb,"","");   
 //8.1、发送标题   
 $smtp[] = array("Subject: ".$subject.$lb,"","");   
 //8.3、发送其他Header内容   
 foreach($hdr as $h) {$smtp[] = array($h.$lb,"","");}   
 //8.4、发送一个空行,结束Header发送   
 $smtp[] = array($lb,"","");   
 //8.5、发送信件主体   
 if($bdy)   
 {   
   foreach($bdy as $b)    
   {   
     $smtp[] = array(base64_encode($b.$lb).$lb,"","");   
   }   
 }   
 //9、发送“.”表示信件结束,期待返回250   
 $smtp[] = array(".".$lb,"250","DATA(end)error: ");   
 //10、发送Quit,退出,期待返回221   
 $smtp[] = array("QUIT".$lb,"221","QUIT error: ");   
 //打开smtp服务器端口   
 $fp = @fsockopen($smtp_host, 25);   
 if (!$fp) echo "<b>Error:</b> Cannot conect to ".$smtp_host."<br>";   
 while($result = @fgets($fp, 1024))   
 {   
    if(substr($result,3,1) == " ") { break; }   
 }   
 $result_str="";   
 //发送smtp数组中的命令/数据   
 foreach($smtp as $req)   
 {   
  //发送信息   
  @fputs($fp, $req[0]);   
  //如果需要接收服务器返回信息,则   
  if($req[1])   
  {   
   //接收信息   
   while($result = @fgets($fp, 1024))   
    {   
      if(substr($result,3,1) == " ") { break; }   
    }   
    if (!strstr($req[1],substr($result,0,3)))   
    {   
      $result_str.=$req[2].$result."<br>";   
    }   
   }   
 }   
 //关闭连接   
 @fclose($fp);   
 if ($result_str==""){return "发送成功!!";}else {return $result_str;}   
}
PHP 相关文章推荐
oracle资料库函式库
Oct 09 PHP
中国站长站 For Dede4.0 采集规则
May 27 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
晋城吧对DiscuzX进行的前端优化要点
Sep 05 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
Jul 21 #PHP
在普通HTTP上安全地传输密码
Jul 21 #PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
Jul 21 #PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 #PHP
一段php加密解密的代码
Jul 16 #PHP
php下一个阿拉伯数字转中文数字的函数
Jul 16 #PHP
php+mysql开源XNA 聚合程序发布 下载
Jul 13 #PHP
You might like
BBS(php &amp; mysql)完整版(八)
2006/10/09 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
python追加元素到列表的方法
2015/07/28 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
一道python走迷宫算法题
2018/01/22 Python
对numpy中shape的深入理解
2018/06/15 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
单方离婚协议书范本2014
2014/10/28 职场文书
九年级化学教学反思
2016/02/22 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
MySQL之DML语言
2021/04/05 MySQL
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
Python实现批量自动整理文件
2022/03/16 Python
golang定时器
2022/04/14 Golang
索尼ICF-36收音机评测
2022/04/30 无线电
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers