php 用sock技术发送邮件的函数
php 用sock技术发送邮件的函数
发布时间:2016-12-29 来源:查字典编辑
摘要:使用sock技术发邮件,无需服务器支持。速度快!!复制代码代码如下:functionsend_mail($to,$subject,$body...

使用sock技术发邮件,无需服务器支持。速度快!!

复制代码 代码如下:

functionsend_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"rnContent-Transfer-Encoding:base64";

$lb="rn";//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","HELOerror:"),

//2、发送AuthLogin,期待返回334

array("AUTHLOGIN".$lb,"334","AUTHerror:"),

//3、发送经过Base64编码的用户名,期待返回334

array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATIONerror:"),

//4、发送经过Base64编码的密码,期待返回235

array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATIONerror:"));

//5、发送MailFrom,期待返回250

$smtp[]=array("MAILFROM:<".$from.">".$lb,"250","MAILFROMerror:");

//6、发送RcptTo。期待返回250

$smtp[]=array("RCPTTO:<".$to.">".$lb,"250","RCPTTOerror:");

//7、发送DATA,期待返回354

$smtp[]=array("DATA".$lb,"354","DATAerror:");

//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($hdras$h){$smtp[]=array($h.$lb,"","");}

//8.4、发送一个空行,结束Header发送

$smtp[]=array($lb,"","");

//8.5、发送信件主体

if($bdy)

{

foreach($bdyas$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","QUITerror:");

//打开smtp服务器端口

$fp=@fsockopen($smtp_host,25);

if(!$fp)echo"<b>Error:</b>Cannotconectto".$smtp_host."<br>";

while($result=@fgets($fp,1024))

{

if(substr($result,3,1)==""){break;}

}

$result_str="";

//发送smtp数组中的命令/数据

foreach($smtpas$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教程学习
编程开发子分类