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连接Oracle for NT 远程数据库
Oct 09 PHP
SMARTY学习手记
Jan 04 PHP
让PHP支持断点续传的源码
May 16 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
php生成短网址示例
May 05 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
yii使用bootstrap分页样式的实例
Jan 17 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 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和ACCESS写聊天室(八)
2006/10/09 PHP
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
理解Javascript闭包
2013/11/01 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
DOM 事件流详解
2015/01/20 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
js断点调试经验分享
2017/12/08 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
初学python数组的处理代码
2011/01/04 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
python实现浪漫的烟花秀
2019/01/30 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
python issubclass 和 isinstance函数
2019/07/25 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
校园餐饮创业计划书
2014/01/10 职场文书
2014年党支部工作总结
2014/11/13 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
Python连续赋值需要注意的一些问题
2021/06/03 Python
Python实现天气查询软件
2021/06/07 Python
新手初学Java List 接口
2021/07/07 Java/Android