ホームページ  >  記事  >  バックエンド開発  >  php 簡単な smtp class_PHP チュートリアル

php 簡単な smtp class_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:53:59981ブラウズ

smtp.class.php

コードをコピーします コードは次のとおりです:


define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE); 
define('SMTP_STATUS_CONNECTED', 2, TRUE); 

class smtp
{

var $connection; 
var $受信者; 
var $headers; 
var $timeout; 
var $errors; 
var $status; 
var $body; 
var $from; 
var $host; 
var $port; 
var $helo; 
var $auth; 
var $user; 
var $pass; 
var $debug; 

/**
* パラメーターは配列です。
* host SMTP サーバーのホスト デフォルト: localhost
* port SMTP サーバーのポート デフォルト: 25
* helo 送信された HELO コマンドの名前 デフォルト: localhost
* user SMTP サーバーのユーザー名 デフォルト: null
* SMTP サーバーのログインパスワードを渡す デフォルト: null
* timeout 接続タイムアウト時間 デフォルト: 5
* @return bool
*/

function smtp($params = array())
{

if(!define('CRLF')) define('CRLF', “rn”, TRUE); 

$this->タイムアウト = 5; 
$this->ステータス = SMTP_STATUS_NOT_CONNECTED; 
$this->host = 「ローカルホスト」; 
$this->ポート = 25; 
$this->auth = FALSE; 
$this->user = ”; 
$this->pass = ”; 
$this->errors = array(); 
$this->デバッグ = false; 
foreach($params as $key => $value)
{
$this->$key = $value; 
}

$this->helo = $this->ホスト; 

// 如果没有設置用户名则不验证
$this->auth = (” == $this->user) ? 真偽; 
}

function connect($params = array())
{

if(!isset($this->status))
{
$obj = new smtp($params); 

if($obj->connect())
{
$obj->status = SMTP_STATUS_CONNECTED; 
}

return $obj; 

}
else
{

$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout); 
socket_set_timeout($this->接続, 0, 250000); 

$greeting = $this->get_data(); 

if(is_resource($this->connection))
{
$this->status = 2; 
$this->認証を返しますか? $this->ehlo() : $this->helo(); 
}
else
{
$this->errors[] = 「サーバーへの接続に失敗しました: 」.$errstr; 
FALSE を返します。 
}
}
}

/**
* パラメーターは配列です
* 受信者 受信者の配列
* 返信アドレスとしても使用される送信者のアドレスからの配列
* headers ヘッダー情報の配列
* body メールの本文
*/

function send($params = array())
{

foreach($params as $key => $value)
{
$this ->set($key, $value); 
}

if($this->is_connected())
{
// 服务器が必要かどうか验证
if($this->auth)
{
if(!$this->auth()) return間違い; 
}

$this->mail($this->from); 

if(is_array($this->recipients))
{
foreach($this->recipients as $value)
{
$this->rcpt($value); 
}
}
else
{
$this->rcpt($this->recipients); 


if(!$this->data()) return FALSE; 

$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers))); 
$body = str_replace(CRLF.'.', CRLF.'...', $this->body); 
$body = $body[0] == ‘。 ? '.'.$body : $body; 

$this->send_data($headers); 
$this->send_data(”); 
$this->send_data($body); 
$this->send_data('.'); 

return (substr(trim($this->get_data()), 0, 3) === ‘250’); 
}
else
{
$this->errors[] = 「接続されていません!」; 
FALSE を返します。 
}
}

function helo()
{
if(is_resource($this->connection)
AND $this->send_data('HELO '.$this->helo)
AND substr(trim( $error = $this->get_data()), 0, 3) === '250′ )
{
return TRUE; 

}
else
{
$this->errors[] = ‘HELO コマンドが失敗しました。出力: ‘ 。 トリム(substr(トリム($error),3)); 
FALSE を返します。 
}
}

function ehlo()
{
if(is_resource($this->connection)
AND $this->send_data('EHLO '.$this->helo)
AND substr(trim( $error = $this->get_data()), 0, 3) === '250′ )
{
return TRUE; 
}
else
{
$this->errors[] = 「EHLO コマンドが失敗しました。出力: 」 。 トリム(substr(トリム($error),3)); 
FALSE を返します。 
}
}

function auth()
{
if(is_resource($this->connection)
AND $this->send_data('AUTH LOGIN')
AND substr(trim($error = $this- >get_data()), 0, 3) === '334'
AND $this->send_data(base64_encode($this->user)) // ユーザー名を送信
AND substr(trim($error = $ this->get_data()),0,3) === '334'
AND $this->send_data(base64_encode($this->pass)) // パスワードを送信
AND substr(trim($error) = $this->get_data()),0,3) === '235' )
{
return TRUE; 
}
else
{
$this->errors[] = ‘AUTH コマンドが失敗しました: ‘ 。 トリム(substr(トリム($error),3)); 
FALSE を返します。 
}
}

function mail($from)
{

if($this->is_connected()
AND $this->send_data('MAIL FROM:<'.$from.'>' )
AND substr(trim($this->get_data()), 0, 2) === '250′ )
{
return TRUE; 
}
else
{
return FALSE; 
}
}

function rcpt($to)
{
if($this->is_connected()
AND $this->send_data('RCPT TO:<'.$to.'>')
AND substr(trim($error = $this->get_data()), 0, 2) === '25′ )
{
return TRUE; 
}
else
{
$this->errors[] = trim(substr(trim($error), 3)); 
FALSE を返します。 
}
}

function data()
{

if($this->is_connected()
AND $this->send_data('DATA')
AND substr(trim($error = $this-> ;get_data()), 0, 3) === '354′ )
{
return TRUE; 
}
else
{
$this->errors[] = trim(substr(trim($error), 3)); 
FALSE を返します。 
}
}

function is_connected()
{
return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED)); 
}

function send_data($data)
{
if(is_resource($this->connection))
{
if($this->debug)
echo nl2br($data.CRLF); 
return fwrite($this->connection, $data.CRLF, strlen($data)+2); 
}
else
{
return FALSE; 
}


function &get_data()
{

$return = ”; 
$line = ”; 

if(is_resource($this->connection))
{
while(strpos($return, CRLF) === FALSE OR substr($line,3,1) !== ' ')
{
$ line = fgets($this->connection, 512); 
$return .= $line; 
}
if($this->debug===true)
echo nl2br($return.CRLF); 
return $return; 

}
else
{
return FALSE; 
}
}

function set($var, $value)
{
$this->$var = $value; 
TRUE を返します。 
}
} // クラス終了
?> 

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/318574.html技術記事 smtp.class.php 复制代码次のように: ?php define('SMTP_STATUS_NOT_CONNECTED',1,TRUE);定義('SMTP_STATUS_CONNECTED',2,TRUE); classsmtp { var$connection; var$受信者; var$h...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。