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 array_filter除去数组中的空字符元素
Jun 21 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
php实现模拟post请求用法实例
Jul 11 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 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加密解密类代码
2011/11/27 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
php使用curl访问https示例分享
2014/01/17 PHP
初识PHP
2014/09/28 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
Vue表单实例代码
2016/09/05 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
python:print格式化输出到文件的实例
2018/05/14 Python
Python交互环境下实现输入代码
2018/06/22 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
学习Django知识点分享
2019/09/11 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
全球最大的游戏市场:G2A
2018/07/05 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
计算机求职信
2013/12/01 职场文书
农民工讨薪标语
2014/06/26 职场文书
超市创意活动方案
2014/08/15 职场文书
博士生专家推荐信
2014/09/26 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书