ホームページ php教程 php手册 PHP メール送信、メール送信用の PHP クラス

PHP メール送信、メール送信用の PHP クラス

Jun 13, 2016 pm 12:11 PM
php コード 保存 送信 コピー バンドル 書類 はい 親切 これ 郵便

smtp.class.php ファイルに保存するクラスです

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


<?php
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->靴下 = FALSE;
}
/* メイン関数 */
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 バージョン:1.0rn";
if($mailtype=="HTML"){
$header .= "Content-Type:text/htmlrn";
}
$header .= "宛先: ".$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 .= "メッセージ ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">gt;;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("E-メールは <".$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 (!$this- >smtp_putcmd("HELO", $helo)) {
return $this->smtp_error("HELO コマンドを送信中");
}
#auth
if($this->auth){
if (!$this->smtp_putcmd("AUTH LOGIN", Base64_encode($this->user)) ) {
return $this->smtp_error("HELO コマンドを送信中");
}
if (!$this->smtp_putcmd("",base64_encode($this->pass))) {
return $this->smtp_error("HELO コマンドを送信中");
}
}
#
if (!$this->smtp_putcmd("MAIL", "FROM:>;")) {
return $this->smtp_error("MAIL FROM コマンドを送信中");
}
if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">;")) {
return $this->smtp_error( "RCPT TO コマンドを送信中");
}
if (!$this->smtp_putcmd("DATA")) {
return $this->smtp_error("DATA コマンドを送信中");
}
if (!$this->smtp_message($header, $body)) {
return $this->smtp_error("送信メッセージ");
}
if (!$this->smtp_eom()) {
return $this->smtp_error("送信中 <CR>;<LF>;.<CR>;&lt ;LF>[EOM]");
}
if (!$this->smtp_putcmd("QUIT")) {
return $this->smtp_error("QUIT コマンドを送信中");
}
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("".$this->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->smtp_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("mx ホスト ".$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 を返します。
}
function 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​​();
}
関数 smtp_error($string)
{
$this->log_write("エラー: ".$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->log_file) || !($fp = @fopen($this->log_file, "a"))) {
$this->smtp_debug( "警告: ログ ファイルを開けません "".$this->log_file.""n");
FALSE を返します。
}
flock($fp, LOCK_EX);
fputs($fp, $message);
fclose($fp);
TRUE を返します。
}
functionstrip_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);
$address を返す;
}
function smtp_debug($message)
{
if ($this->debug) {
echo $message;
}
}
}
function sendmail($smtpserver,$smtpuser,$smtppass,$smtpemailto,$smtpusermail, $mailsubject, $mailbody){
$smtp = new smtp($ smtpserver,25,true,$smtpuser,$smtppass);
//$smtp->debug = TRUE;
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, "HTML");
}
//
など//sendmail("smtp.126.com","test@126.com","password","1034555083@qq.com","test@126 .com","タイトル","本文");
?>


测试代码:

复制代码 代码如下:


<?
//OK メールで送信します。
include "smtp.class.php";
//$smtpserver = "SMTP.163.com" //SMTP サーバーのアドレス
$smtpserver="smtp.163.com";
$port =25; //SMTP サーバーのポート、通常は 25
$smtpuser = "Your email@163.com" //SMTP サーバーにログインするためのユーザー名
$smtppwd = " メール アドレスのパスワード"; //SMTP サーバーにログインするためのパスワード
$mailtype = "TXT" //メールの種類、オプションの値は TXT または HTML、TXT はプレーン テキスト メールを意味します。 , HTML とは、
$sender = "your email@163.com";
//送信者は、通常、smtp へのログインに使用するユーザー名 ($smtpuser) と同じである必要があります。そうしないと、smtp サーバーに起因するエラーが発生する可能性があります。この設定により送信が失敗します
$smtp = new smtp($smtpserver,$port,true,$smtpuser,$smtppwd,$sender); smtp->debug = true; //デバッグを有効にするかどうか。正式に使用する場合は、この行をコメントしてください。
$to = "送信先のメール アドレス" ; //受信者
$subject = "こんにちは";
$body = "送信内容"
$send=$smtp->sendmail($to,$sender,$subject,$body) ,$mailtype);

if( $send==1){
echo "メールの送信に失敗しました"
}else{
echo "メールの送信に失敗しました"; ;
//echo "理由:". $this->smtp->logs;


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles