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带密码功能并下载远程文件保存本地指定目录 修改加强版
May 16 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
PHP基础知识介绍
Sep 17 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
微信 getAccessToken方法详解及实例
Nov 23 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
Laravel框架学习笔记之批量更新数据功能
May 30 PHP
解决Laravel5.5下的toArray问题
Oct 15 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
消息持续发送的完整例子
2006/10/09 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
php 获取本机外网/公网IP的代码
2010/05/09 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
python简单程序读取串口信息的方法
2015/03/13 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
python @property的用法及含义全面解析
2018/02/01 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
高一历史教学反思
2014/01/13 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python