php发邮件类
php发邮件类 ```phplt;?php /******************************************************************************* 程序名: Email 描述: 这个程序是用来作发送电子邮件用
<?php /******************************************************************************* 程序名: Email 描述: 这个程序是用来作发送电子邮件用途的 可被用发送的邮件可以是:一般文本,含HTML标识的文本,或两都是,以及邮件附件或邮件模板。 测试: test_email.php3: $mail->setTo("myEmail@yo.com"); $mail->send(); 更改日志: 时间 姓名 备注 ----------- ----------- ------------------------------------------------ 10/21/1999 R.Chambers 创建 *******************************************************************************/ /******************************************************************************* 试用报告: 没有出错报告 可以发送带HTML标识的文本 可以发送有附件的并HTML标识的文本 *******************************************************************************/ /******************************************************************************* 函数列表: setTo($inAddress) setCC($inAddress) setBCC($inAddress) setFrom($inAddress) setSubject($inSubject) setText($inText) setHTML($inHTML) setAttachments($inAttachments) checkEmail($inAddress) loadTemplate($inFileLocation,$inHash,$inFormat) getRandomBoundary($offset) getContentType() formatTextHeader() formatHTMLHeader() formatAttachmentHeader($inFileLocation) send() *******************************************************************************/ class Email { //---全局变量 var $mailTo = ""; // 邮件目的地址数组 var $mailCC = ""; // 抄送人地址 var $mailBCC = ""; // 暗送人地址 var $mailFrom = ""; // 发送人地址 var $mailSubject = ""; // 邮件主题 var $mailText = ""; // 纯文本信息 var $mailHTML = ""; // html 文本信息 var $mailAttachments = ""; // 附件数组 /******************************************************************************* 函数: setTo($inAddress) 描述: 设置电子邮件地址 参数: $inAddress 是 string 类型 按逗号把各个邮件地址分离出来 返回值: 如果成功则返回true *******************************************************************************/ function setTo($inAddress){ //--把逗号做分隔符分离邮件地址 $addressArray = explode( ",",$inAddress); //--检查每一个邮件地址,如果没有错误就退出。 for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; } //--如果所有的邮件地址都正确,那么调用implode把邮件地址恢复 $this->mailTo = implode($addressArray, ","); return true; } /******************************************************************************* 函数: setCC($inAddress) 描述:设置邮件的抄送地址 参数: $inAddress 是String型 按逗号把各个邮件地址分离出来 返回值: 如果成功则返回true *******************************************************************************/ function setCC($inAddress){ $addressArray = explode( ",",$inAddress); for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; } $this->mailCC = implode($addressArray, ","); return true; } /******************************************************************************* 函数: setBCC($inAddress) 描述: 设置暗送邮件地址 参数: $inAddress 是String型 按逗号把各个邮件地址分离出来 返回值: 如果成功则返回true *******************************************************************************/ function setBCC($inAddress){ $addressArray = explode( ",",$inAddress); for($i=0;$i<count($addressArray);$i++){ if($this->checkEmail($addressArray[$i])==false) return false; } $this->mailBCC = implode($addressArray, ","); return true; } /******************************************************************************* 函数: setFrom($inAddress) 描述: 设置邮件发送人地址 参数: $inAddress 是 string 型 (只有一个邮件地址) 返回值:如果成功则返回true *******************************************************************************/ function setFrom($inAddress){ if($this->checkEmail($inAddress)){ $this->mailFrom = $inAddress; return true; } return false; } /******************************************************************************* 函数: setSubject($inSubject) 描述: 设置邮件主题 参数:$inSubject 是 string 类型 返回值:如果成功则返回true *******************************************************************************/ function setSubject($inSubject){ if(strlen(trim($inSubject)) > 0){ $this->mailSubject = ereg_replace( "\n", "",$inSubject); return true; } return false; } /******************************************************************************* 函数: setText($inText) 描述:设置邮件纯文本内容 参数: $inText 是 string 类型 返回值:如果成功则返回true *******************************************************************************/ function setText($inText){ if(strlen(trim($inText)) > 0){ $this->mailText = $inText; return true; } return false; } /******************************************************************************* 函数: setHTML($inHTML) 描述:设置邮件HTML文本内容 参数: $inHTML 是 string 类型 返回值:如果成功则返回true *******************************************************************************/ function setHTML($inHTML){ if(strlen(trim($inHTML)) > 0){ $this->mailHTML = $inHTML; return true; } return false; } /******************************************************************************* 函数: setAttachments($inAttachments) 描述: 存贮附件字符串 参数: $inAttachments 是一个包含了目录信息的String类型 以逗号为分隔符 返回值:如果成功则返回true *******************************************************************************/ function setAttachments($inAttachments){ if(strlen(trim($inAttachments)) > 0){ $this->mailAttachments = $inAttachments; return true; } return false; } /******************************************************************************* 函数: checkEmail($inAddress) 描述:检查邮件地址是法合法 参数:$inAddress 是 string 类型 返回值:如果合法则返回true *******************************************************************************/ 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 是 string 类型,记录目录信息 $inHash 是 Hash 类型,是要被替代的值 $inFormat 是 string 类型,可以是 "text" 或 "html" 返回值:如果被load则返回true *******************************************************************************/ function loadTemplate($inFileLocation,$inHash,$inFormat){ /* 模板文件应该有像下面那样的样子: Dear ~!UserName~, Your address is ~!UserAddress~ */ //--指定模板的一些符号 $templateDelim = "~"; $templateNameStart = "!"; //--设置外部字串 $templateLineOut = ""; //--打开模板文件 if($templateFile = fopen($inFileLocation, "r")){ //--循环分析文件,一行一行的分析 while(!feof($templateFile)){ $templateLine = fgets($templateFile,1000); //--分开文件的每一行,并把其存于数组中,并且规范其语句 $templateLineArray = explode($templateDelim,$templateLine); for( $i=0; $i<count($templateLineArray);$i++){ //--从0的位置开始寻找 $templateNameStart if(strcspn($templateLineArray[$i],$templateNameStart)==0){ //--在 $templateNameStart 之后得到宏定义的名字 $hashName = substr($templateLineArray[$i],1); //--替代宏定义的名字 $templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName); } } //--输出字串数全,并把它加入到外部数组中 $templateLineOut .= implode($templateLineArray, ""); } //--关闭文件 fclose($templateFile); //--按固定的格式设置邮件内容 if( strtoupper($inFormat)== "TEXT" ) return($this->setText($templateLineOut)); else if( strtoupper($inFormat)== "HTML" ) return($this->setHTML($templateLineOut)); } return false; } /******************************************************************************* 函数:getRandomBoundary($offset) 描述:返回一个边界随机值 参数: $offset 是 integer 类型 返回:字符串 *******************************************************************************/ function getRandomBoundary($offset = 0){ srand(time()+$offset); return ( "----".(md5(rand()))); } /******************************************************************************* 函数:getContentType($inFileName) 描述:为文件种类返回一个 内容的种类 参数:$inFileName 是一个 string 类型,记录文件名(可以含路径) 返回:字串 *******************************************************************************/ 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"; default: return "application/octet-stream"; } return "application/octet-stream"; } /******************************************************************************* 函数: formatTextHeader 描述: 为文本返回一个格式化过的头信息 参数: 没有 返回: 字串 *******************************************************************************/ function formatTextHeader(){ $outTextHeader = ""; $outTextHeader .= "Content-Type: text/plain; charset=us-ascii\n"; $outTextHeader .= "Content-Transfer-Encoding: 7bit\n\n"; $outTextHeader .= $this->mailText. "\n"; return $outTextHeader; } /******************************************************************************* 函数: formatHTMLHeader 描述: 返回一个HTML的头信息 参数: 没有 返回: 字串 *******************************************************************************/ function formatHTMLHeader(){ $outHTMLHeader = ""; $outHTMLHeader .= "Content-Type: text/html; charset=us-ascii\n"; $outHTMLHeader .= "Content-Transfer-Encoding: 7bit\n\n"; $outHTMLHeader .= $this->mailHTML. "\n"; return $outHTMLHeader; } /******************************************************************************* 函数: formatAttachmentHeader($inFileLocation) 描述: 返回一个附件的头信息 参数: $inFileLocation 是相关目录的String型变量 返回: 字串 *******************************************************************************/ function formatAttachmentHeader($inFileLocation){ $outAttachmentHeader = ""; //--通过文件夹的扩展名得到 content-type $contentType = $this->getContentType($inFileLocation); //--如果是TEXT的类型,那么就用标准的7bit编码 if(ereg( "text",$contentType)){ //--格式化信息头 $outAttachmentHeader .= "Content-Type: ".$contentType. ";\n"; $outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'. "\n"; $outAttachmentHeader .= "Content-Transfer-Encoding: 7bit\n"; $outAttachmentHeader .= "Content-Disposition: attachment;\n"; //--other: inline $outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'. "\n\n"; $textFile = fopen($inFileLocation, "r"); //--一行一行地检查文件 while(!feof($textFile)){ $outAttachmentHeader .= fgets($textFile,1000); } //--关闭文件 fclose($textFile); $outAttachmentHeader .= "\n"; } //--非TEXT类型用 64-bit 编码 else{ //--格式头信息 $outAttachmentHeader .= "Content-Type: ".$contentType. ";\n"; $outAttachmentHeader .= ' name="'.basename($inFileLocation). '"'. "\n"; $outAttachmentHeader .= "Content-Transfer-Encoding: base64\n"; $outAttachmentHeader .= "Content-Disposition: attachment;\n"; //--other: inline $outAttachmentHeader .= ' filename="'.basename($inFileLocation). '"'. "\n\n"; //--调用 uuencode 命令 exec( "uuencode -m $inFileLocation nothing_out",$returnArray); //--加入每一行的返回值 for ($i = 1; $i<(count($returnArray)); $i++){ $outAttachmentHeader .= $returnArray[$i]. "\n"; } } return $outAttachmentHeader; } /******************************************************************************* 函数: send() 描述: 发送邮件 参数: 没有 返回: 发送成功返回真 *******************************************************************************/ 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"; //---------------------------信息类型------------------------------- //--TEXT文本 if($this->mailText != "" && $this->mailHTML == "" && $this->mailAttachments == ""){ return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader); } //--HTML 和 TEXT else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments == ""){ //--得到一个随机边界 $bodyBoundary = $this->getRandomBoundary(); //--格式化头信息 $textHeader = $this->formatTextHeader(); $htmlHeader = $this->formatHTMLHeader(); //--设置 MIME 版本 $mailHeader .= "MIME-Version: 1.0\n"; $mailHeader .= "Content-Type: multipart/alternative;\n"; $mailHeader .= ' boundary="'.$bodyBoundary. '"'; $mailHeader .= "\n\n\n"; //--加入信体和边界 $mailHeader .= "--".$bodyBoundary. "\n"; $mailHeader .= $textHeader; $mailHeader .= "--".$bodyBoundary. "\n"; //--加入HTML和结束边界 $mailHeader .= $htmlHeader; $mailHeader .= "\n--".$bodyBoundary. "--"; //--发送信息 return mail($this->mailTo,$this->mailSubject, "",$mailHeader); } //--HTML 和 TEXT 和 附件 else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments != ""){ $attachmentBoundary = $this->getRandomBoundary(); //--为所有的部分和边界设置信息头 $mailHeader .= "Content-Type: multipart/mixed;\n"; $mailHeader .= ' boundary="'.$attachmentBoundary. '"'. "\n\n"; $mailHeader .= "This is a multi-part message in MIME format.\n"; $mailHeader .= "--".$attachmentBoundary. "\n"; //--TEXT 和 HTML-- $bodyBoundary = $this->getRandomBoundary(1); //--格式化头信息 $textHeader = $this->formatTextHeader(); $htmlHeader = $this->formatHTMLHeader(); //--设置 MIME 版本 $mailHeader .= "MIME-Version: 1.0\n"; //--为所有的部分和边界设置信息头 $mailHeader .= "Content-Type: multipart/alternative;\n"; $mailHeader .= ' boundary="'.$bodyBoundary. '"'; $mailHeader .= "\n\n\n"; //--加入信体和边界 $mailHeader .= "--".$bodyBoundary. "\n"; $mailHeader .= $textHeader; $mailHeader .= "--".$bodyBoundary. "\n"; //--加入 html 和 结尾边界 $mailHeader .= $htmlHeader; $mailHeader .= "\n--".$bodyBoundary. "--"; //--得到附件文件名数组 $attachmentArray = explode( ",",$this->mailAttachments); //--检索第一个附件 for($i=0;$i<count($attachmentArray);$i++){ //--附件分隔标志 $mailHeader .= "\n--".$attachmentBoundary. "\n"; //--得到附件信息 $mailHeader .= $this->formatAttachmentHeader($attachmentArray[$i]); } $mailHeader .= "--".$attachmentBoundary. "--"; return mail($this->mailTo,$this->mailSubject, "",$mailHeader); } return false; } } ?>
- 上一篇:php使用smtp,pop3协议收发邮件代码
- 下一篇:php画饼图代码
精彩图集
精彩文章