Heim  >  Artikel  >  Backend-Entwicklung  >  php 用sock技术发送邮件的函数_php技巧

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

WBOY
WBOYOriginal
2016-05-17 09:39:11937Durchsuche

使用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: ".$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;}  
}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn