PHP_Mail STMP 単純クラス

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 13:41:22
オリジナル
908 人が閲覧しました

class smtp

{

/* パブリック変数 */

var $smtp_port; 

var $time_out; 

var $host_name; 

var $log_file; 

var $relay_host; 

var $debug; 

var $auth; 

var $user; 

var $pass; 

/* プライベート変数 */

var $sock; 

/* コンストラクター */

function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)

{

$this->debug =偽。 

$this->smtp_port = $smtp_port; 

$this->relay_host = $relay_host; 

$this->time_out = 30; // fsockopen() で使用されます

$this->auth = $auth;//auth

$this->user = $user; 

$this->pass = $pass; 

$this->host_name = "localhost"; //HELO コマンドで使用されます

$this->log_file = ""; 

$this->sock = FALSE; 

}

/* Main Function */

function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "" , $Additional_headers = "")

{

$mail_from = $this->get_address($this->strip_comment($from)); 

$body = ereg_replace("(^|(rn))(.)", "1.3", $body); 

$header .= "MIME-Version:1.0rn"; 

if($mailtype=="HTML")

{

$header .= "Content-Type:text/htmlrn"; 

}

$header .= "To: ".$to."rn"; 

if ($cc != "")

{

$header .= "Cc: ".$cc."rn"; 

}

$header .= "From: $from<".$from.">rn"; 

$header .= "件名: ".$subject."rn"; 

$header .= $Additional_headers; 

$header .= "日付: ".date("r")."rn"; 

$header .= "X-Mailer:By Redhat (PHP/".phpversion().")rn"; 

list($msec, $sec) =explode(" ", microtime()); 

$header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">rn"; 

$TO =explode(",", $this->strip_comment($to)); 

if ($cc != "")

{

$TO = array_merge($TO,explode(",", $this->strip_comment($cc))); 

}

if ($bcc != "")

{

$TO = array_merge($TO,explode("," $this->strip_comment($bcc) ))); 

}

$sent = TRUE; 

foreach ($TO as $rcpt_to)

{

$rcpt_to = $this->get_address($rcpt_to); 

if (!$this->smtp_sockopen($rcpt_to))

{

$this->log_write("エラー: ".$rcpt_to."n にメールを送信できません"); 

$sent = FALSE; 

続けます。 

}

if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body))

{

$this->log_write("電子メール<".$rcpt_to.">n"); に送信されました。 

}

else

{

$this->log_write("エラー: < にメールを送信できません。".$rcpt_to .">n"); 

$sent = FALSE; 

}

fclose($this->sock); 

$this->log_write("リモート ホストn から切断されました"); 

}

$sent を返します。 

}

/* プライベート関数 */

function smtp_send($helo, $from, $to, $header, $body = "")

{

if (!$これ->smtp_putcmd ("HELO", $helo))

{

return $this->smtp_error("sending HELO command"); 

}

#auth

if($this->auth)

{

if (!$this- >smtp_putcmd("認証ログイン",base64_encode($this->user)) )

{

return $this->smtp_error("sending HELO command"); 

}

if (!$this->smtp_putcmd("", Base64_encode($this->pass)))

{

return $this->smtp_error("sending HELO command"); 

}

}

if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">"))

{

$this->smtp_error を返す(「MAIL FROM コマンドの送信」); 

}

if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">"))

{

return $this- >smtp_error("送信中RCPT TO コマンド"); if(!$ this-&gt; smtp_putcmd( "data"))

{

$ $ this-&gt; smtp_error( "dats data command"); if(!$ this-&gt; smtp_message($ header、$ body))

{

$ $ this-&gt; smtp_error( "sending message"); 

}

if (!$this->smtp_eom())

{

return $this->smtp_error("sending < ;LF>. [ EOM]"); 

}

if (!$this->smtp_putcmd("QUIT"))

{

return $this->smtp_error("sending QUIT command"); 

}

TRUE を返します。 

}

function smtp_sockopen($address)

{

if ($this->relay_host == "")

{

return $this->smtp_sockopen_mx($address); 

}

else

{

return $this->smtp_sockopen_relay(); 

}

}

function smtp_sockopen_relay()

{

$this->log_write("Trying to ".$this-& gt;relay_host.":".$this->smtp_port." n"); 

$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out); 

if (!($this->sock && $this->smtp_ok​​()))

{

$this->log_write("エラー: リレーホストに接続できません ".$this->リレーホスト."n"); 

$this->log_write("エラー: ".$errstr." (".$errno.")n"); 

FALSE を返します。 

}

$this->log_write("リレー ホスト ".$this->relay_host."n"); に接続しました。 

TRUE を返します;; 

}

function smtp_sockopen_mx($address)

{

$domain = ereg_replace("^.+@([^@]+)$", "1", $address); 

if (!@getmxrr($domain, $MXHOSTS))

{

$this->log_write("エラー: MX "".$domain.""n"); 

FALSE を返します。 

}

foreach ($MXHOSTS as $host)

{

$this->log_write("Trying to ".$host.":".$this->smt p_port."n"); 

$this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out); 

if (!($this->sock && $this->smtp_ok​​()))

{

$this->log_write("警告: mx ホストに接続できません".$host."n "); 

$this->log_write("エラー: ".$errstr." (".$errno.")n"); 

続けます。 

}

$this->log_write("Connected to mx host ".$host."n"); 

TRUE を返します。 

}

$this->log_write("エラー: どの mx ホストにも接続できません (".implode(", ", $MXHOSTS).")n"); 

FALSE を返します。 

}

function smtp_message($header, $body)

{

fputs($this->sock, $header."rn".$body); 

$this->smtp_debug("> ".str_replace("rn", "n"."> ", $header."n> ".$body."n> ")); 

TRUE を返します。 

}

関数 smtp_eom()

{

fputs($this->sock, "rn.rn"); 

$this->smtp_debug(". [EOM]n"); 

return $this->smtp_ok​​(); 

}

function smtp_ok​​()

{

$response = str_replace("rn", "", fgets($this->sock, 512)); 

$this->smtp_debug($response."n"); 

if (!ereg("^[23]", $response))

{

fputs($this->sock, "QUITrn"); 

fgets($this->sock, 512); 

$this->log_write("エラー: リモート ホストが "".$response.""n"); を返しました。 

FALSE を返します。 

}

TRUE を返します。 

}

function smtp_putcmd($cmd, $arg = "")

{

if ($arg != "")

{

if($cmd=="")

{

$cmd = $arg; 

}

else

{

$cmd = $cmd." ".$arg; 

}

}

fputs($this->sock, $cmd."rn"); 

$this->smtp_debug(">gt; ".$cmd."n"); 

return $this->smtp_ok​​(); 

}

function smtp_error($string)

{

$this->log_write("Error: ".$string.".n"); 

FALSE を返します。 

}

function log_write($message)

{

$this->smtp_debug($message); 

if ($this->log_file == "")

{

return TRUE; 

}

$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message; if(!@file_exists($ this-&gt; log_file)||!($ fp = @fopen($ this-&gt; log_file、 "a")) "警告: ログ ファイルを開けません "".$this->log_file.""n"); 

FALSE を返します;; 

}

flock($fp, LOCK_EX); 

fputs($fp, $message); 

fclose($fp); 

TRUE を返します。 

}

functiontrip_comment($address)

{

$comment = "([^()]*)"; 

while (ereg($comment, $address))

{

$address = ereg_replace($comment, "", $address); 

}

$address を返します。 

}

function get_address($address)

{

$address = ereg_replace("([ trn])+", "", $address); 

$address = ereg_replace("^.*<(.+)>.*$", "1", $address); 

$アドレス;サーバーポート

$ smtpusermail= "myemail@163.com";//SMTP サーバーのユーザーのメールアドレス

$smtpemailto = "Consumer@qq.com";// 送信先

$smtpuser = "myemail@163.com";//SMTP サーバーのユーザーアカウント

$smtppass = "myemailpassword";//SMTP サーバーのユーザーパスワード

$mailsubject = "Mail subject";//メールの件名

$mailbody = "メール内容";//メール内容

$ mailtype = "HTML"; //メール形式(HTML/TXT)

$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass); //ここで true は認証を使用することを意味し、それ以外の場合は認証は使用されません

$smtp->debug = TRUE;//送信されたデバッグ情報を表示するかどうか

$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject、$mailbody、$mailtype);

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート