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 相关文章推荐
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php _autoload自动加载类与机制分析
Feb 10 PHP
基于php 随机数的深入理解
Jun 05 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
yii中widget的用法
Dec 03 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
php判断表是否存在的方法
Jun 18 PHP
PHP生成树的方法
Jul 28 PHP
PHP自定义函数实现数组比较功能示例
Oct 19 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 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
Php部分常见问题总结
2006/10/09 PHP
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
Javascript的一种模块模式
2008/03/22 Javascript
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
python实现汉诺塔算法
2021/03/01 Python
python统计中文字符数量的两种方法
2019/01/31 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
PHP面试题及答案一
2012/06/18 面试题
机械设计专业应届生求职信
2013/11/21 职场文书
五一口号
2014/06/19 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
公司周年庆典致辞
2015/07/30 职场文书
外出听课学习心得体会
2016/01/15 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android