复制代码代码如下:
/*
*phpsmtp发送邮件Scoket类
*ZhozPhpSmtpSendMail.php
*Createdon2008/09/02zhoz.com
*@authorzhoz
*v1.72update2008/09/26zhoz.Com
*/
classZhozPhpSmtpSendMail{
//您的SMTP服务器供应商,可以是域名或IP地址
var$smtp="";
//SMTP需要要身份验证设值为1,不需要身份验证值为0,现在大多数的SMTP服务商都要验证,如不清楚请与你的smtp服务商联系。
var$check=1;
//您的email帐号名称
var$username="";
//您的email密码
var$password="";
//此email必需是发信服务器上的email
var$s_from="";
/*
*功能:发信初始化设置
*$from你的发信衿魃系挠氏?
*$password你的邮箱密码
*$smtp您的SMTP服务器供应商,可以是域名或IP地址
*$checkSMTP需要要身份验证设值为1不需要身份验证值为0,现在大多数的SMTP服务商都要验证
*/
functionZhozPhpSmtpSendMail($from,$password,$smtp,$check=1){
if(preg_match("/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/",$from)){
$this->username=substr($from,0,strpos($from,"@"));
$this->password=$password;
$this->smtp=$smtp?$smtp:$this->smtp;
$this->check=$check;
$this->s_from=$from;
}
}
/*
*功能:发送邮件
*$to目标邮箱
*$from来源邮箱
*$subject邮件标题
*$message邮件内容
*/
functionzhoz_send($to,$from,$subject,$message){
//连接服务器
$fp=fsockopen($this->smtp,25,$errno,$errstr,60);
if(!$fp)return"联接服务器失败".__LINE__;
set_socket_blocking($fp,true);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=220)return"错误信息1:$lastmessage".__LINE__;
//HELO
$yourname="YOURNAME";
if($this->check=="1")$lastact="EHLO".$yourname."\r\n";
else$lastact="HELO".$yourname."\r\n";
fputs($fp,$lastact);
$lastmessage==fgets($fp,512);
if(substr($lastmessage,0,3)!=220)return"错误信息2:$lastmessage".__LINE__;
while(true){
$lastmessage=fgets($fp,512);
if((substr($lastmessage,3,1)!="-")or(emptyempty($lastmessage)))
break;
}
//身份验证
if($this->check=="1"){
//验证开始
$lastact="AUTHLOGIN"."\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=334)return"错误信息3:$lastmessage".__LINE__;
//用户姓名
$lastact=base64_encode($this->username)."\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=334)return"错误信息4:$lastmessage".__LINE__;
//用户密码
$lastact=base64_encode($this->password)."\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!="235")return"错误信息5:$lastmessage".__LINE__;
}
//FROM:
$lastact="MAILFROM:s_from.">\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=250)return"错误信息6:$lastmessage".__LINE__;
//TO:
$lastact="RCPTTO:\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=250)return"错误信息7:$lastmessage".__LINE__;
//DATA
$lastact="DATA\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=354)return"错误信息8:$lastmessage".__LINE__;
//处理Subject头
$head="Subject:$subject\r\n";
$message=$head."\r\n".$message;
//处理From头
$head="From:$from\r\n";
$message=$head.$message;
//处理To头
$head="To:$to\r\n";
$message=$head.$message;
//加上结束串
$message.="\r\n.\r\n";
//发送信息
fputs($fp,$message);
$lastact="QUIT\r\n";
fclose($fp);
error_log("sendover------->ok!!",0);
returntrue;
}
}
?>
/*
*phpsmtp发送邮件Scoket类
*ZhozPhpSmtpSendMail.php
*Createdon2008/09/02zhoz.com
*@authorzhoz
*v1.72update2008/09/26zhoz.Com
*/
classZhozPhpSmtpSendMail{
/
/您的SMTP服务器供应商,可以是域名或IP地址
var$smtp="";
//SMTP需要要身份验证设值为1,不需要身份验证值为0,现在大多数的SMTP服务商都要验证,如不清楚请与你的smtp服务商联系。
var$check=1;
//您的email帐号名称
var$username="";
//您的email密码
var$password="";
//此email必需是发信服务器上的email
var$s_from="";
/*
*功能:发信初始化设置
*$from你的发信服务器上的邮箱
*$password你的邮箱密码
*$smtp您的SMTP服务器供应商,可以是域名或IP地址
*$checkSMTP需要要身份验证设值为1不需要身份验证值为0,现在大多数的SMTP服务商都要验证
*/
functionZhozPhpSmtpSendMail($from,$password,$smtp,$check=1){
if(preg_match("/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/",$from)){
$this->username=substr($from,0,strpos($from,"@"));
$this->password=$password;
$this->smtp=$smtp?$smtp:$this->smtp;
$this->check=$check;
$this->s_from=$from;
}
}
/*
*功能:发送邮件
*$to目标邮箱
*$from来源邮箱
*$subject邮件标题
*$message邮件内容
*/
functionzhoz_send($to,$from,$subject,$message){
//连接服务器
$fp=fsockopen($this->smtp,25,$errno,$errstr,60);
if(!$fp)return"联接服务器失败".__LINE__;
set_socket_blocking($fp,true);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=220)return"错误信息1:$lastmessage".__LINE__;
//HELO
$yourname="YOURNAME";
if($this->check=="1")$lastact="EHLO".$yourname."\r\n";
else$lastact="HELO".$yourname."\r\n";
fputs($fp,$lastact);
$lastmessage==fgets($fp,512);
if(substr($lastmessage,0,3)!=220)return"错误信息2:$lastmessage".__LINE__;
while(true){
$lastmessage=fgets($fp,512);
if((substr($lastmessage,3,1)!="-")or(empty($lastmessage)))
break;
}
//身份验证
if($this->check=="1"){
//验证开始
$lastact="AUTHLOGIN"."\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=334)return"错误信息3:$lastmessage".__LINE__;
//用户姓名
$lastact=base64_encode($this->username)."\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=334)return"错误信息4:$lastmessage".__LINE__;
//用户密码
$lastact=base64_encode($this->password)."\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!="235")return"错误信息5:$lastmessage".__LINE__;
}
//FROM:
$lastact="MAILFROM:s_from.">\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=250)return"错误信息6:$lastmessage".__LINE__;
//TO:
$lastact="RCPTTO:\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=250)return"错误信息7:$lastmessage".__LINE__;
//DATA
$lastact="DATA\r\n";
fputs($fp,$lastact);
$lastmessage=fgets($fp,512);
if(substr($lastmessage,0,3)!=354)return"错误信息8:$lastmessage".__LINE__;
//处理Subject头
$head="Subject:$subject\r\n";
$message=$head."\r\n".$message;
//处理From头
$head="From:$from\r\n";
$message=$head.$message;
//处理To头
$head="To:$to\r\n";
$message=$head.$message;
//加上结束串
$message.="\r\n.\r\n";
//发送信息
fputs($fp,$message);
$lastact="QUIT\r\n";
fclose($fp);
error_log("sendover------->ok!!",0);
returntrue;
}
}
?>
测试方法一样。
运行代码查看代码复制代码打印关于
/**
*ZhozPhpSmtpSendMail.php
*Createdon2008/09/02zhoz.com
*phpsmtp发送邮件类
*代替mail():因为它报错,我又不想
*/
//这里配置发信服务器信息,如果不改也可以正常使用:
$from='zhoz@zhoz.com';//你的发信服务器上的邮箱
$password='zhoz';//你的邮箱密码
$smtp='smtp.zhoz.com'
;//您的SMTP服务器供应商,可以是域名或IP地址
//类初始化
$zhoz_obj=newZhozPhpSmtpSendMail($from,$password,$smtp);
//发送开始
$status=$zhoz_obj->zhoz_send("zhoz008@126.com","zhoz@zhoz.com","subjectiszhoz","bodyiszhoz.com");
if($status){
echo$status;
echo"no---------";
}else{
echo"sendok-----------------!";
die;
}
//结果当然是:sendok-----------------!
?>
您可能感兴趣的文章:使用PHPSocket写的POP3类php自定义类fsocket模拟post或get请求的方法PHP的Socket网络编程入门指引PHP基于socket实现客户端和服务端通讯功能PHP利用Socket获取网站的SSL证书与公钥用PHP的socket实现客户端到服务端的通信实例详解php中使用websocket详解PHP使用socket发送HTTP请求的方法利用PHP如何实现Socket服务器PHPSocket网络操作类定义与用法示例
本文介绍了一个使用PHP编写的SMTP Socket类,用于发送电子邮件,解决了传统mail()函数存在的问题。通过实例配置和发送邮件过程,展示了如何通过SMTP身份验证和自定义邮件头进行高效邮件发送。

434

被折叠的 条评论
为什么被折叠?



