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 session有效期问题
Apr 26 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
PHP 实现explort() 功能的详解
Jun 20 PHP
解析php中的escape函数
Jun 29 PHP
dedecms中使用php语句指南
Nov 13 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php的debug相关函数用法示例
Jul 11 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 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防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
js控制frameSet示例
2013/09/10 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Django实现学员管理系统
2019/02/26 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
python 通过exifread读取照片信息
2020/12/24 Python
python中操作文件的模块的方法总结
2021/02/04 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
工商技校毕业生自荐信
2013/11/15 职场文书
汽车技术服务英文求职信范文
2014/01/02 职场文书
员工培训邀请函
2014/01/11 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
Win11快速关闭所有广告推荐
2022/04/19 数码科技