找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 556|回复: 0
打印 上一主题 下一主题

php 用sock技术发送邮件的函数

[复制链接]

2560

主题

2560

帖子

7622

积分

论坛元老

Rank: 8Rank: 8

积分
7622
跳转到指定楼层
楼主
发表于 2018-2-14 09:24:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            使用sock技术发邮件,无需服务器支持。速度快!!  
[U]复制代码[/U] 代码如下:
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: ".$lb,"250","MAIL FROM error: ");   
//6、发送Rcpt To。期待返回250   
$smtp[] = array("RCPT 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 "Error: Cannot conect to ".$smtp_host."
";   
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."
";   
    }   
   }   
}   
//关闭连接   
@fclose($fp);   
if ($result_str==""){return "发送成功!!";}else {return $result_str;}   
}
            
            
您可能感兴趣的文章:
  • PHP的类 功能齐全的发送邮件类
  • PHPMailer邮件类利用smtp.163.com发送邮件方法
  • PHP mail 通过Windows的SMTP发送邮件失败的解决方案
  • php邮件发送,php发送邮件的类
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端