ホームページ  >  記事  >  バックエンド開発  >  詳細な説明 詳細な説明付きのフル機能の PHP メール送信コード

詳細な説明 詳細な説明付きのフル機能の PHP メール送信コード

WBOY
WBOYオリジナル
2016-07-29 08:38:23805ブラウズ

class Email {
//---グローバル変数を設定します
var $mailCC = "" // CC
var $mailBCC = ""; CC
var $mailFrom = ""; // 送信者
var $mailSubject = ""; // レター本文のテキスト形式
var $mailHTML = ""; HTML 形式のレターの本文
var $mailAttachments = ""; // 添付ファイル
/* 関数 setTo($inAddress): 電子メールの処理に使用されるアドレス パラメータ $inAddress
1 つ以上の文字列、電子メール アドレス変数が含まれます。複数のメールアドレスを区切るにはカンマを使用します
デフォルトの戻り値は true です
************************************ *******************************/
function setTo($inAddress){
//--explode() 関数を使用します"," に従ってメール アドレスを分割します
$addressArray =explode( ",",$inAddress);
//--ループを通じてメール アドレスの有効性をチェックします
for($i=0;$icheckEmail($addressArray[$i])==false) return false }
//--すべての有効な電子メール アドレスは配列
$this に保存されます。 ->mailTo = implode($addressArray, ",");
return true; }
/**************************************************
機能setCC($inAddress) カーボン コピー者の電子メール アドレスを設定します
パラメータ $inAddress は、1 つ以上の電子メール アドレス、電子メール アドレス変数を含む文字列です
複数の電子メール アドレスを区切るにはカンマを使用します デフォルトの戻り値は true です
* *********************************************** **** ********/
function setCC($inAddress){
//--explode() 関数を使用して編集します"," に基づく電子メール アドレス Split
$addressArray =explode( ",",$inAddress);
//--ループを通じて電子メール アドレスの有効性を確認します
for($i=0;$icheckEmail($addressArray[$i])==false) return false; }
//--すべての正当な電子メール アドレスは配列に保存されます
$this- >mailCC = implode($ addressArray, ",");
return true; }
/****************************************************
関数 setBCC($inAddress) は、秘密のカーボン コピー アドレスを設定します。パラメーター $inAddress は、1 つ以上の
メール アドレスを含む文字列です。複数のメール アドレスを区切るには、カンマを使用します。デフォルトの戻り値は
true です。 **** *************************************/
function setBCC($inAddress){
//--explode() 関数を使用して"," に基づく電子メール アドレス
$ addressArray =explode( ",",$inAddress);
//-- ループを通じて電子メール アドレスの有効性を確認します
for($i=0;$i{ if ($this->checkEmail($addressArray[$i])==false)
return false;
}
//--すべての正当な電子メール アドレスは配列
$this に保存されます->mailBCC = implode($ addressArray, ",");
return true
/*************************************************** * *************
関数 setFrom($inAddress): 電子メールを含めるように送信者アドレス パラメーター $inAddress を設定します
アドレス文字列のデフォルトの戻り値は true です
***** ******* *******************************/
function setFrom($inAddress){
if($this->checkEmail($inAddress) )){
$this-> ;mailFrom = $inAddress;
return true; }
/**********************
関数 setSubject($inSubject) は、電子メールの件名パラメータ $inSubject を文字列に設定するために使用されます。
デフォルトの戻り値は true です
**** ***************************************/
function setSubject($inSubject){
if(trim($inSubject) )) > 0){
$this->mailSubject = ereg_replace( "n", "",$inSubject); }
return false; ($inText){
if( strlen(trim($inText)) > 0){
$this->mailText = $inText }
return false;
/**************************************
関数 setHTML($inHTML) は、メール本文のパラメーター $inHTML を HTML に設定しますHTML形式へのフォーマット、
デフォルトの戻り値はtrueです
************************************* ******/
function setHTML($inHTML){
if(strlen(trim($inHTML)) > 0){
$this->mailHTML = $inHTML; }
false を返す; }
/**********************
関数 setAttachments($inAttachments) は、電子メールの添付ファイルを設定します。パラメーター $inAttachments は、ディレクトリを含む文字列であり、複数を含むこともできます。ファイルをカンマで区切ります。デフォルトの戻り値は true です
************************************ *********** **/
function setAttachments($inAttachments){
if(strlen(trim($inAttachments)) > 0){
$this->mailAttachments = $inAttachments; true; }
return false; }
/**********************************
関数 checkEmail($inAddress): この関数は以前にすでに呼び出しており、主に
使用されていますメールアドレスの正当性を確認するため
*****************************************/
function checkEmail($inAddress){
return (ereg( "^[^@]+@([a-zA-Z0-9-]+ .)+([a-zA-Z0-9-]{2}|net|com|gov|mil|org|edu|int)$",$inAddress));
}
/****************************************************
関数loadTemplate ($inFileLocation,$inHash,$inFormat)は一時ファイルを読み取り、
無駄な情報パラメータを置き換えます $inFileLocationはファイルのディレクトリを見つけるために使用されます
$inHashは一時値を保存するために使用されます $inFormatは配置するために使用されますメール本文
****** *************************************** *********** *** /
function loadTemplate($inFileLocation,$inHash,$inFormat){
/* たとえば、メールには次の内容が含まれています: Dear ~!UserName~ 様、
あなたのアドレスは ~!UserAddress~ */
//--where "~! " は開始マークです。 "~" は終了マークです
$templateDelim = "~";
$templateNameStart = "!";
//-これらの場所を見つけて置き換えます
$templateLineOut = "" / / -- 一時ファイルを開く
if($templateFile = fopen($inFileLocation, "r")){
while(!feof($templateFile)){
$templateLine = fgets($templateFile,1000); explode ($templateDelim,$templateLine);
for( $i=0; $i//--開始位置を見つける
if(strcspn($templateLineArray[$i]) , $templateNameStart)==0){
//-- 対応する値を置き換えます
$hashName = substr($templateLineArray[$i],1);
//-- 対応する値を置き換えます
$templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName);
}
}
//--出力文字配列とオーバーレイ
$templateLineOut .= implode($templateLineArray, ""); / /-- ファイルを閉じる fclose($templateFile);
//--本文の形式 (テキストまたは HTML) を設定する
if( strtoupper($inFormat)== "TEXT" )
return($this->setText ($templateLineOut ));
else if( strtoupper($inFormat)== "HTML" )
return($this->setHTML($templateLineOut));
/******************************************
関数 getRandomBoundary($offset) はランダムな境界を返します値
パラメータ $offset は整数です – マルチパイプライン呼び出しに使用され、md5() でエンコードされた文字列を返します
************************** ***** **************** */
function getRandomBoundary($offset = 0){
//--乱数生成
srand(time()+$offset);
//-- md5 でエンコードされた 32 ビット文字長の文字列を返す
return ( " -- --".(md5(rand()))); }
/*********************************************
関数: getContentType($inFileName)添付ファイルの種類を決定するために使用されます
****************************************** ****** ***/
function getContentType($inFileName){
//--パスを削除
$inFileName = Basename($inFileName) ;
//--拡張子のないファイルを削除します
if(strrchr($inFileName, ".") == false){
return "application/octet-stream"; 
//--提区扩展名并进行判断
$extension = strrchr($inFileName, "."); 
switch($extension){
case ".gif": return "image/gif"; 
case ".gz": return "application/x-gzip"; 
case ".htm": return "text/html"; 
case ".html": return "text/html"; 
case ".jpg": return "image/jpeg"; 
case ".tar": return "application/x-tar"; 
case ".txt": return "text/plain"; 
case ".zip": return "application/zip"; 
デフォルト: "application/octet-stream" を返します。 
}
return "application/octet-stream"; 
}
/*************************************************
formatTextHeader関数テキストコンテンツを変換します テキストファイルヘッダーを追加します
***************************************** ******* **********/
function formatTextHeader(){ $outTextHeader = ""; 
$outTextHeader .= "Content-Type: text/plain;
charset=us-asciin"; 
$outTextHeader .= "Content-Transfer-Encoding: 7bitnn"; 
$outTextHeader .= $this->メールテキスト。 「ん」; 
$outTextHeader を返す; 
} /*************************************************
関数形式HTMLHeader( )HTML ファイルのヘッダーをメールのメインコンテンツに追加します
************************************ ****** ****/
function formatHTMLHeader(){
$outHTMLHeader = ""; 
$outHTMLHeader .= "Content-Type: text/html;
charset=us-asciin"; 
$outHTMLHeader .= "Content-Transfer-Encoding: 7bitnn"; 
$outHTMLHeader .= $this->mailHTML。 「ん」; 
$outHTMLHeader を返す; 
}
/***************************************
関数 formatAttachmentHeader($inFileLocation) は、メール内の添付ファイルを識別します
*** ****************************/
function formatAttachmentHeader($inFileLocation){
$outAttachmentHeader = ""; 
//--上の関数getContentType($inFileLocation)を使用して付属ファイルの種類を取得します
$contentType = $this->getContentType($inFileLocation); 
//--如果添付ファイルは文本型です标標準の7位コードです
if(ereg("text",$contentType)){
$outAttachmentHeader .= "Content-Type: ".$contentType. ";n"; 
$outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'。 「ん」; 
$outAttachmentHeader .= "Content-Transfer-Encoding: 7bitn"; 
$outAttachmentHeader .= "Content-Disposition: attachment;n"; 
$outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'。 「ん」; 
$textFile = fopen($inFileLocation, "r"); 
while(!feof($textFile)){
$outAttachmentHeader .= fgets($textFile,1000); 
}
//--关闭文件fclose($textFile); 
$outAttachmentHeader .= "n"; 
}
//--非文本格式则用64位进行编码
else{ $outAttachmentHeader .= "Content-Type: ".$contentType. ";n"; 
$outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'。 「ん」; 
$outAttachmentHeader .= "Content-Transfer-Encoding: base64n"; 
$outAttachmentHeader .= "Content-Disposition: attachment;n"; 
$outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'。 「ん」; 
//--调用外部コマンドuuencode进行编码
exec( "uuencode -m $inFileLocation nothing_out",$returnArray); 
for ($i = 1; $i$outAttachmentHeader .= $returnArray[$i]。 「ん」; 
}
} $outAttachmentHeader を返します。 
}
/**********************************
関数 send() はメールの送信に使用され、送信に成功すると戻り値は true になります
***** ****************************/
function send(){
//--メールヘッダーを空に設定します
$mailHeader = ""
//-- カーボンコピーの人を追加します
if($this-> ;mailCC != "")
$mailHeader .= "CC: ".$this->mailCC. "n";
//--秘密のカーボンコピー人物を追加
if($this->mailBCC != " ")
$mailHeader .= "BCC: ".$this->mailBCC. "n";
//--送信者を追加
if($this->mailFrom != "")
$mailHeader .= " FROM: ".$this->mailFrom. "n";
//---------------------------メール形式--- -----------------------------
//--テキスト形式
if($this->mailText != "" && $this ->mailHTML == "" && $this->mailAttachments == ""){
return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader );
}
//--html またはテキスト形式
else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments == "") {
$bodyBoundary = $this->getRandomBoundary();
$textHeader = $this->formatHTMLHeader();
//--MIME バージョンを設定します
$mailHeader .= "MIME バージョン: 1.0n";
$mailHeader .= "Content-Type: multipart/alternative;n";
$mailHeader .= 'boundary="'.$bodyBoundary. '"'; mailHeader . = "nnn";
//-メール本文と境界を追加します
$mailHeader .= $textHeader .= "-- ". $bodyBoundary. "n";
//--HTML タグを追加します
$mailHeader .= $htmlHeader;
$mailHeader .= "n--".$bodyBoundary. "--";
//--送信email
return mail($this->mailTo,$this->mailSubject, "",$mailHeader);
//--テキストと HTML と添付ファイル
else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments != ""){
$attachmentBoundary = $this->getRandomBoundary()
$mailHeader .= "Content-Type: multipart /mixed ;n";
$mailHeader .= 'boundary="'.$attachmentBoundary. '"'. "nn";
$mailHeader .= "これは MIME 形式のマルチパート メッセージです。n";
$ mailHeader .$attachmentBoundary."n";
$bodyBoundary = $this->formatTextHeader(); ;formatHTMLHeader ();
$mailHeader .= "MIME バージョン: 1.0n";
$mailHeader .= "Content-Type: multipart/alternative;n"; '" ';
$mailHeader .= "nnn";
$mailHeader .= "--".$bodyBoundary. "n";
$mailHeader .= $textHeader;
$mailHeader .= "--".$bodyBoundary . " n";
$mailHeader .= $htmlHeader;
//--添付ファイルの値を取得します
$attachmentArray( ",", $this ->mailAttachments);
//--添付ファイルの数に応じてループします
for($i=0;$i//-- $mailHeader を分割します。 = " n--".$attachmentBoundary. "n";
//--添付ファイル情報
$mailHeader .= $this->formatAttachmentHeader($attachmentArray[$i])
}
$mailHeader .= "- -" .$attachmentBoundary. "--";
return mail($this->mailTo,$this->mailSubject, "",$mailHeader);
}
return false;
}
}
?>
使用方法:



コードをコピーします

コードは次のとおりです:


「email.class」を含める
$mail->setTo("a@a.com") //受信者
$mail-> .com"); //CC
$mail->setCC("d@b.com,e@c.com"); //シークレット CC
$mail->setFrom("f@ f.com") );//送信者
$mail->setSubject("件名"); //件名
$mail->setText("テキスト形式");//送信テキスト形式も変数にできます
$mail-> ;setHTML("html format");//送信する HTML 形式は変数にすることもできます
$mail->setAttachments("c:a.jpg");//添付ファイルを追加するには、パスを指定する必要があります
$ mail->send() // メールを送信します
?>

上記では、電子メールを送信するための完全に機能する PHP コードが詳細な手順を含めて添付されているので、PHP チュートリアルに興味のある友人に役立つことを願っています。

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