class ZSMailBox
{
var $fpSocket;
var $strLog;
var $strSMTPServer;
var $strSMTPPort;
var $strFrom;
var $strTo;
function ZSMailBox ()
{
$this->strLog = "";
$this->strSMTPPort = "25";
$this->strFrom = "";
$this->strTo = "";
}
function DoCommand ($strCommand, $strOKReply)
{
fputs ($this->fpSocket, $strCommand);
$strReply = fgets ($this->fpSocket, 512);
if(! ereg("^$strOKReply", $strReply))
{
return false;
}
return true;
}
function WaitReply ($strOKReply)
{
$strReply = fgets ($this->fpSocket, 512);
$this->strLog .= "Reply:$strReply" . "
n";
if (! ereg ("^$strOKReply", $strReply))
{
return false;
}
return true;
}
function SendData ($strSubject, $strContent)
{
$str = "To: " . $this->strTo . chr(13) . chr(10);
$str .= "From: " . $this->strFrom . chr(13) . chr(10);
$str .= "Subject: " . $strSubject . chr(13) . chr(10) . chr(13) . chr(10);
$str .= $strContent;
$str .= chr(13) . chr (10) . "." . chr(13) . chr(10);
fputs ($this->fpSocket, $str);
return true;
}
function SendMail ($strSubject, $strContent)
{
if ($this->VerifySMTPVariables ())
{
$this->strLog = "";
} else
{
$this->strLog = "Any of SMTP variables are invaild
n";
return false;
}
$this->fpSocket = fsockopen ($this->strSMTPServer, $this->strSMTPPort);
if (! $this->fpSocket)
{
$this->strLog .= "Cann't open socket
n";
return false;
}
$this->strLog .= "Open socket succeed
n";
if (! $this->WaitReply ("220"))
{
fclose ($this->fpSocket);
return false;
}
$strCommand = "HELO " . $this->strSMTPServer . "n";
if (! $this->DoCommand ($strCommand, "250"))
{
$this->strLog .= "HELO error
n";
fclose ($this->fpSocket);
return false;
}
$strCommand = "MAIL FROM: <" . $this->strTo . ">n";
if (! $this->DoCommand ($strCommand, "250"))
{
$this->strLog .= "MAIL error
n";
fclose ($this->fpSocket);
return false;
}
$strCommand = "RCPT TO: <" . $this->strTo . ">n";
if (! $this->DoCommand ($strCommand, "250"))
{
$this->strLog .= "Refuse to establish the channel
n";
fclose ($this->fpSocket);
return false;
}
$strCommand = "DATAn";
if (! $this->DoCommand ($strCommand, "354"))
{
$this->strLog .= "Refuse to recieve the data
n";
fclose ($this->fpSocket);
return false;
}
if (! $this->SendData ($strSubject, $strContent))
{
$this->strLog .= "Send data error
n";
fclose ($this->fpSocket);
return false;
}
if (! $this->WaitReply ("250"))
{
$this->strLog .= "Send data unsuccessful
n";
fclose ($this->fpSocket);
return false;
}
$strCommand = "QUITn";
if (! $this->DoCommand ($strCommand, "221"))
{
$this->strLog .= "QUIT error
n";
fclose ($this->fpSocket);
return false;
}
fclose ($this->fpSocket);
return true;
}
function VerifyMailAddr ($strMailAddr)
{
return (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$strMailAddr));
}
function VerifyWebSiteAddr ($strWebSiteAddr)
{
return (eregi ("^([_0-9a-z-]+.)+[a-z]{2,3}$", $strWebSiteAddr));
}
function VerifySMTPVariables ()
{
if (! $this->VerifyWebSiteAddr ($this->strSMTPServer))
return false;
if (! isset ($this->strSMTPPort))
return false;
if (! $this->VerifyMailAddr ($this->strFrom))
return false;
if (! $this->VerifyMailAddr ($this->strTo))
return false;
return true;
}
function SetSMTPVariables ($strServer, $strPort, $strFrom, $strTo)
{
if (isset ($strServer))
$this->strSMTPServer = $strServer;
if (isset ($strPort))
$this->strSMTPPort = $strPort;
if (isset ($strFrom))
$this->strFrom = $strFrom;
if (isset ($strTo))
$this->strTo = $strTo;
}
}
?>
if (isset ($strTo) && ($strTo != ""))
{
if (isset ($nServer))
{
switch ($nServer)
{
case 1: $strSMTPServer = "smtp.sina.com.cn";
$strSMTPPort = "25";
$strTo .= "@sina.com";
break;
case 2: $strSMTPServer = "smtp.163.net";
$strSMTPPort = "25";
$strTo .= "@163.net";
break;
case 3: $strSMTPServer = "smtp.yeah.net";
$strSMTPPort = "25";
$strTo .= "@yeah.net";
break;
case 4: $strSMTPServer = "smtp.netease.com";
$strSMTPPort = "25";
$strTo .= "@netease.com";
break;
case 5: $strSMTPServer = "smtp.sohu.com";
$strSMTPPort = "25";
$strTo .= "@sohu.com";
break;
case 6: $strSMTPServer = "smtp.263.net";
$strSMTPPort = "25";
$strTo .= "@263.net";
break;
default: $strSMTPServer = "smtp.sina.com.cn";
$strSMTPPort = "25";
$strTo = "[email protected]";
break;
}
}
if (! isset ($strFrom) || ($strFrom == ""))
{
$strFrom = $strTo;
}
if (! isset ($strSubject) || ($strSubject == ""))
{
$strSubject = "No subject";
}
if (! isset ($strContent) || ($strContent == ""))
{
$strContent = "No content";
}
$zsmb = new ZSMailBox;
$zsmb->SetSMTPVariables ($strSMTPServer, $strSMTPPort, $strFrom, $strTo);
if ($zsmb->SendMail ($strSubject, $strContent))
{
printf ("OK");
} else
{
printf ($zsmb->strLog);
}
}
?>