当前位置: 首页 > 图文教程 > 网络编程 > PHP > php 用sock技术发送邮件的函数

PHP
用PHP调用Oracle存储过程的方法
FleaPHP的安全设置方法
PHP cron中的批处理
php 301转向实现代码
PHP面向对象分析设计的经验原则
PHP伪造referer实例代码
什么是phpDocumentor
php下防止单引号,双引号在接受页面转义的设置方法
php横向重复区域显示二法
PHP集成FCK的函数代码
php 三维饼图的实现代码
php不用GD库生成当前时间的PNG格式图象的程序
10条PHP编程习惯助你找工作
PHP网站基础优化方法小结
40个迹象表明你还是PHP菜鸟
PHP EOT定界符的使用详解
php数组总结篇(一)
利用PHP制作简单的内容采集器的原理分析
php之对抗Web扫描器的脚本技巧
PHP在字符串中查找指定字符串并删除的代码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 267 ::
收藏到网摘: n/a

使用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 = "[email protected]"; //要与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;}
}