test_smtp.php
require("smtp.php");
$smtp=new smtp_class;
$smtp->host_name="mail.xiaocui.com";
$smtp->localhost="localhost";
$from="webmaster@xiaocui.com";
$to="root@xiaocui.com";
if($smtp-> SendMessage(
$from,
array(
$to
),
array(
"보낸 사람: $from",
"받는 사람: $to",
"제목: Manuel Lemos의 SMTP 클래스 테스트"
),
"안녕하세요 $to,nnSMTP 클래스가 제대로 작동하고 있음을 알려드립니다.nnBye.n"))
echo "$to OK.n으로 메시지 전송됨";
else
echo "$to.nError로 메시지를 보낼 수 없습니다: ".$smtp->error."n"
?>
smtp.php
class smtp_class
{
var $host_name="";
var $host_port=25;
var $localhost="";
var $timeout=0;
var $error="";
var $debug=1;
var $esmtp=1;
var $esmtp_host="";
var $esmtp_extensi>var $maximum_piped_recipients=100;
/* 개인 변수 - 액세스하지 마세요 */
var $state="Disconnected";
var $c>var $pending_recipients=0;
/ * 비공개 메소드 - 호출하지 마세요 */
Function OutputDebug($message)
{
echo $message,"
n";
}
Function GetLine()
{
for($line="";;)
{
if(feof($this->connection))
{
$this->error="도달함" 소켓에서 읽는 동안 스트림 끝";
return(0);
}
if(($data=fgets($this->connection,100))==false)
{
$this->error="소켓에서 행을 읽을 수 없습니다.";
return(0);
}
$line.=$data;
$length =strlen($line);
if($length>=2
&& substr($line,$length-2,2)=="rn")
{
$line=substr ($line,0,$length-2);
if($this->debug)
$this->OutputDebug("< $line");
return($line);
}
}
}
함수 PutLine($line)
{
if($this->debug )
$this->OutputDebug("> $line");
if(!fputs($this->connection,"$linern"))
{
$this- >error="소켓에 줄을 쓸 수 없습니다.";
return(0);
}
return(1);
}
Function PutData($data)
{
if(strlen($data))
{
if($this->debug)
$this->OutputDebug("> $data");
if(!fputs($this->connection,$data))
{
$this->error="소켓에 데이터를 쓸 수 없습니다.";
return(0) ;
}
}
return(1);
}
함수 verifyResultLines($code,$resp>{
if(GetType($responses)!="array")
$resp> Unset($match_code);
while(($line=$this->GetLine($this->connection)))
{
if(IsSet($match_code ))
{
if(strcmp(strtok($line," -"),$match_code))
{
$this->error=$line;
return(0 );
}
}
else
{
$match_code=strtok($line," -");
if(GetType($code)=="array")
{
for($codes=0;$codes
{
$this->error=$line;
return(0);
}
}
else
{
if(strcmp($match_code,$code))
{
$this->error=$line;
return(0);
}
}
}
$responses[]=strtok("");
if(!strcmp($match_code,strtok($line," ")))
return(1 );
}
return(-1);
}
FlushRecipients() 함수
{
if($this->pending_sender)
{
if ($this->VerifyResultLines("250")<=0)
return(0);
$this->pending_sender=0;
}
for(;$this- >pending_recipients;$this->pending_recipients--)
{
if($this->VerifyResultLines(array("250","251"))<=0)
return( 0);
}
return(1);
}
/* 공개 메서드 */
Function Connect()
{
$this->error=$ error="";
$this->esmtp_host="";
$this->esmtp_extensi> if(!($this->c ? fsockopen($this->host_name,$this ->host_port,&$errno,&$error,$this->timeout) : fsockopen($this->host_name,$this->host_port))))
{
스위치($ error)
{
case -3:
$this->error="-3 소켓을 생성할 수 없습니다.";
return(0);
case -4:
$this->error="-4 호스트 이름 "".$host_name.""에 대한 DNS 조회 실패";
return(0);
case -5:
$this->error ="-5 연결 거부 또는 시간 초과";
return(0);
case -6:
$this->error="-6 fdopen() 호출 실패";
return (0);
case -7:
$this->error="-7 setvbuf() 호출 실패";
return(0);
기본값:
$this- >error=$error."는 호스트 "".$this->host_name.""";
return(0);
}
}
else
{
if(!strcmp($localhost=$this->localhost,"")
&& !strcmp($localhost=getenv("SERVER_NAME"),"")
&& !strcmp( $localhost=getenv("HOST"),""))
$localhost="localhost";
$success=0;
if($this->VerifyResultLines("220")> 0)
{
if($this->esmtp)
{
$resp> if($this->PutLine("EHLO $localhost")
&& $this- >VerifyResultLines("250",&$responses)>0)
{
$this->esmtp_host=strtok($responses[0]," ");
for($resp> {
$extension=strtoupper(strtok($responses[$response]," "));
$this->esmtp_extensions[$extension]=strtok("");
}
$success=1;
}
}
if(!$success
&& $this->PutLine("HELO $localhost")
&& $this->VerifyResultLines(" 250")>0)
$success=1;
}
if($success)
{
$this->state="Connected";
return( 1);
}
else
{
fclose($this->connection);
$this->c> $this->state="Disconnected";
return(0);
}
}
}
함수 MailFrom($sender)
{
if(strcmp($this->state,"Connected"))
{
$this->error="연결이 초기 상태가 아닙니다";
return(0);
}
$this->error="";
if(!$ this->PutLine("메일 보낸 사람: <".$sender.">"))
return(0);
if(!IsSet($this->esmtp_extensions["PIPELINING"] )
&& $this->VerifyResultLines("250")<=0)
return(0);
$this->state="SenderSet";
if(IsSet( $this->esmtp_extensions["PIPELINING"]))
$this->pending_sender=1;
$this->pending_recipients=0;
return(1);
}
함수 SetRecipient($recipient)
{
switch($this->state)
{
case "SenderSet":
case "RecipientSet":
break;
기본값:
$this->error="연결이 수신자 설정 상태가 아닙니다.";
return(0);
}
$this->error="";
if(!$this->PutLine("RCPT TO:<".$recipient.">"))
return(0);
if(IsSet($this-> esmtp_extensions["PIPELINING"]))
{
$this->pending_recipients ;
if($this->pending_recipients>=$this->maximum_piped_recipients)
{
if (!$this->FlushRecipients())
return(0);
}
}
else
{
if($this->VerifyResultLines(array(" 250","251"))<=0)
return(0);
}
$this->state="RecipientSet";
return(1);
}
함수 StartData()
{
if(strcmp($this->state,"RecipientSet"))
{
$this->error="연결이 다음 위치에 있지 않습니다. 데이터 전송 시작 상태";
return(0);
}
$this->error="";
if(!$this->PutLine("DATA"))
return(0);
if($this->pending_recipients)
{
if(!$this->FlushRecipients())
return(0);
}
if($this->VerifyResultLines("354")<=0)
return(0);
$this->state="SendingData";
return(1 );
}
PrepareData($data,&$output) 함수
{
$length=strlen(&$data);
for($output="",$position= 0;$position<$length;)
{
$next_position=$length;
for($current=$position;$current<$length;$current )
{
스위치 ($data[$current])
{
case "n":
$next_position=$current 1;
break 2;
case "r":
$next_position= $current 1;
if($data[$next_position]=="n")
$next_position ;
break 2;
}
}
if($data[$ position]==".")
$output.=".";
$output.=substr(&$data,$position,$current-$position)."rn";
$ position=$next_position;
}
}
함수 SendData($data)
{
if(strcmp($this->state,"SendingData"))
{
$this->error="연결이 데이터 전송 상태가 아닙니다";
return(0);
}
$this->error="";
return( $this->PutData(&$data));
}
함수 EndSendingData()
{
if(strcmp($this->state,"SendingData"))
{
$this->error="연결이 데이터 상태 전송 중";
return(0);
}
$this->error="";
if(!$this->PutLine("rn.")
|| $this->VerifyResultLines("250")<=0)
return(0);
$this->state="Connected";
return(1);
}
함수 ResetConnection()
{
switch($this->state)
{
case "Connected":
return(1);
case "SendingData":
$this->error="데이터를 보내는 동안 연결을 재설정할 수 없습니다.";
return(0);
case "Disconnected":
$this->error ="연결이 설정되기 전에는 연결을 재설정할 수 없습니다.";
return(0);
}
$this->error="";
if(!$this->PutLine ("RSET")
|| $this->VerifyResultLines("250")<=0)
return(0);
$this->state="Connected";
return(1);
}
기능 연결 끊기($quit=1)
{
if(!strcmp($this->state,"Disconnected"))
{
$this->error="이전에 SMTP 연결이 설정되지 않았습니다.";
return(0);
}
$this->error="";
if( !strcmp($this->state,"Connected")
&& $quit
&& (!$this->PutLine("QUIT")
|| $this->VerifyResultLines("221")<=0))
return(0);
fclose($this->connection);
$this->c> $this ->state="Disconnected";
return(1);
}
함수 SendMessage($sender,$recipients,$headers,$body)
{
if(($ 성공=$this->Connect()))
{
if(($success=$this->MailFrom($sender)))
{
for($recipient=0 ;$recipient
if(!($success=$this->SetRecipient($recipients[$recipient])))
break;
}
if($success
&& ($success=$this->StartData()))
{
for($header_data="",$header=0;$header< count($headers);$header )
$header_data.=$headers[$header]."rn";
if(($success=$this->SendData($header_data."rn") ))
{
$this->PrepareData($body,&$body_data);
$success=$this->SendData($body_data);
}
if( $success)
$success=$this->EndSendingData();
}
}
$disc> if($success)
$success=$disconnect_success;
}
return($success);
}
};
?>
以上就介绍了she is my sin gtp smtp邮件发送一例,包括了she is my sin gtp면적内容,希望对PHP教程有兴趣的朋友有所帮助。