<?php
classEmail{
//---设置全局变量
var$mailTo="";//收件人
var$mailCC="";//抄送
var$mailBCC="";//秘密抄送
var$mailFrom="";//发件人
var$mailSubject="";//主题
var$mailText="";//文本格式的信件主体
var$mailHTML="";//html格式的信件主体
var$mailAttachments="";//附件
/*函数setTo($inAddress):用于处理邮件的地址参数$inAddress
为包涵一个或多个字串,email地址变量,使用逗号来分割多个邮件地址
默认返回值为true
**********************************************************/
functionsetTo($inAddress){
//--用explode()函数根据”,”对邮件地址进行分割
$addressArray=explode(",",$inAddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$i<count($addressArray);$i++){if($this->checkEmail($addressArray[$i])==false)returnfalse;}
//--所有合法的email地址存入数组中
$this->mailTo=implode($addressArray,",");
returntrue;}
/**************************************************
函数setCC($inAddress)设置抄送人邮件地址
参数$inAddress为包涵一个或多个邮件地址的字串,email地址变量,
使用逗号来分割多个邮件地址默认返回值为true
**************************************************************/
functionsetCC($inAddress){
//--用explode()函数根据”,”对邮件地址进行分割
$addressArray=explode(",",$inAddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$i<count($addressArray);$i++){if($this->checkEmail($addressArray[$i])==false)returnfalse;}
//--所有合法的email地址存入数组中
$this->mailCC=implode($addressArray,",");
returntrue;}
/***************************************************
函数setBCC($inAddress)设置秘密抄送地址参数$inAddress为包涵一个或多
个邮件地址的字串,email地址变量,使用逗号来分割多个邮件地址默认返回值为
true
******************************************/
functionsetBCC($inAddress){
//--用explode()函数根据”,”对邮件地址进行分割
$addressArray=explode(",",$inAddress);
//--通过循环对邮件地址的合法性进行检查
for($i=0;$i<count($addressArray);$i++)
{if($this->checkEmail($addressArray[$i])==false)
returnfalse;
}
//--所有合法的email地址存入数组中
$this->mailBCC=implode($addressArray,",");
returntrue;
}
/*****************************************************************
函数setFrom($inAddress):设置发件人地址参数$inAddress为包涵邮件
地址的字串默认返回值为true
***************************************/
functionsetFrom($inAddress){
if($this->checkEmail($inAddress)){
$this->mailFrom=$inAddress;
returntrue;
}returnfalse;}
/**********************
函数setSubject($inSubject)用于设置邮件主题参数$inSubject为字串,
默认返回的是true
*******************************************/
functionsetSubject($inSubject){
if(strlen(trim($inSubject))>0){
$this->mailSubject=ereg_replace("n","",$inSubject);
returntrue;}
returnfalse;}
/****************************************************
函数setText($inText)设置文本格式的邮件主体参数$inText为文本内容默
认返回值为true
****************************************/
functionsetText($inText){
if(strlen(trim($inText))>0){
$this->mailText=$inText;
returntrue;}
returnfalse;
}
/**********************************
函数setHTML($inHTML)设置html格式的邮件主体参数$inHTML为html格式,
默认返回值为true
************************************/
functionsetHTML($inHTML){
if(strlen(trim($inHTML))>0){
$this->mailHTML=$inHTML;
returntrue;}
returnfalse;}
/**********************
函数setAttachments($inAttachments)设置邮件的附件参数$inAttachments
为一个包涵目录的字串,也可以包涵多个文件用逗号进行分割默认返回值为true
*******************************************/
functionsetAttachments($inAttachments){
if(strlen(trim($inAttachments))>0){
$this->mailAttachments=$inAttachments;
returntrue;}
returnfalse;}
/*********************************
函数checkEmail($inAddress):这个函数我们前面已经调用过了,主要就是
用于检查email地址的合法性
*****************************************/
functioncheckEmail($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由于放置邮件主体
***********************************************************/
functionloadTemplate($inFileLocation,$inHash,$inFormat){
/*比如邮件内有如下内容:Dear~!UserName~,
Youraddressis~!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++){
//--寻找起始位置
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));
elseif(strtoupper($inFormat)=="HTML")
return($this->setHTML($templateLineOut));
}returnfalse;
}
/*****************************************
函数getRandomBoundary($offset)返回一个随机的边界值
参数$offset为整数–用于多管道的调用返回一个md5()编码的字串
****************************************/
functiongetRandomBoundary($offset=0){
//--随机数生成
srand(time()+$offset);
//--返回md5编码的32位字符长度的字串
return("----".(md5(rand())));}
/********************************************
函数:getContentType($inFileName)用于判断附件的类型
**********************************************/
functiongetContentType($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把文本内容加上text的文件头
*****************************************************/
functionformatTextHeader(){$outTextHeader="";
$outTextHeader.="Content-Type:text/plain;
charset=us-asciin";
$outTextHeader.="Content-Transfer-Encoding:7bitnn";
$outTextHeader.=$this->mailText."n";
return$outTextHeader;
}/************************************************
函数formatHTMLHeader()把邮件主体内容加上html的文件头
******************************************/
functionformatHTMLHeader(){
$outHTMLHeader="";
$outHTMLHeader.="Content-Type:text/html;
charset=us-asciin";
$outHTMLHeader.="Content-Transfer-Encoding:7bitnn";
$outHTMLHeader.=$this->mailHTML."n";
return$outHTMLHeader;
}
/**********************************
函数formatAttachmentHeader($inFileLocation)把邮件中的附件标识出来
********************************/
functionformatAttachmentHeader($inFileLocation){
$outAttachmentHeader="";
//--用上面的函数getContentType($inFileLocation)得出附件类型
$contentType=$this->getContentType($inFileLocation);
//--如果附件是文本型则用标准的7位编码
if(ereg("text",$contentType)){
$outAttachmentHeader.="Content-Type:".$contentType.";n";
$outAttachmentHeader.='name="'.basename($inFileLocation).'"'."n";
$outAttachmentHeader.="Content-Transfer-Encoding:7bitn";
$outAttachmentHeader.="Content-Disposition:attachment;n";
$outAttachmentHeader.='filename="'.basename($inFileLocation).'"'."nn";
$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).'"'."n";
$outAttachmentHeader.="Content-Transfer-Encoding:base64n";
$outAttachmentHeader.="Content-Disposition:attachment;n";
$outAttachmentHeader.='filename="'.basename($inFileLocation).'"'."nn";
//--调用外部命令uuencode进行编码
exec("uuencode-m$inFileLocationnothing_out",$returnArray);
for($i=1;$i<(count($returnArray));$i++){
$outAttachmentHeader.=$returnArray[$i]."n";
}
}return$outAttachmentHeader;
}
/******************************
函数send()用于发送邮件,发送成功返回值为true
************************************/
functionsend(){
//--设置邮件头为空
$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==""){
returnmail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader);
}
//--html或text格式
elseif($this->mailText!=""&&$this->mailHTML!=""&&$this->mailAttachments==""){
$bodyBoundary=$this->getRandomBoundary();
$textHeader=$this->formatTextHeader();
$htmlHeader=$this->formatHTMLHeader();
//--设置MIME-版本
$mailHeader.="MIME-Version:1.0n";
$mailHeader.="Content-Type:multipart/alternative;n";
$mailHeader.='boundary="'.$bodyBoundary.'"';
$mailHeader.="nnn";
//--添加邮件主体和边界
$mailHeader.="--".$bodyBoundary."n";
$mailHeader.=$textHeader;
$mailHeader.="--".$bodyBoundary."n";
//--添加html标签
$mailHeader.=$htmlHeader;
$mailHeader.="n--".$bodyBoundary."--";
//--发送邮件
returnmail($this->mailTo,$this->mailSubject,"",$mailHeader);
}
//--文本加html加附件
elseif($this->mailText!=""&&$this->mailHTML!=""&&$this->mailAttachments!=""){
$attachmentBoundary=$this->getRandomBoundary();
$mailHeader.="Content-Type:multipart/mixed;n";
$mailHeader.='boundary="'.$attachmentBoundary.'"'."nn";
$mailHeader.="Thisisamulti-partmessageinMIMEformat.n";
$mailHeader.="--".$attachmentBoundary."n";
$bodyBoundary=$this->getRandomBoundary(1);
$textHeader=$this->formatTextHeader();
$htmlHeader=$this->formatHTMLHeader();
$mailHeader.="MIME-Version:1.0n";
$mailHeader.="Content-Type:multipart/alternative;n";
$mailHeader.='boundary="'.$bodyBoundary.'"';
$mailHeader.="nnn";
$mailHeader.="--".$bodyBoundary."n";
$mailHeader.=$textHeader;
$mailHeader.="--".$bodyBoundary."n";
$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."--";
returnmail($this->mailTo,$this->mailSubject,"",$mailHeader);
}
returnfalse;
}
}
?>
使用方法:
复制代码 代码如下:
<?
Include“email.class”
$mail->setTo("a@a.com");//收件人
$mail->setCC("b@b.com,c@c.com");//抄送
$mail->setCC("d@b.com,e@c.com");//秘密抄送
$mail->setFrom(“f@f.com”);//发件人
$mail->setSubject(“主题”);//主题
$mail->setText(“文本格式”);//发送文本格式也可以是变量
$mail->setHTML(“html格式”);//发送html格式也可以是变量
$mail->setAttachments(“c:a.jpg”);//添加附件,需表明路径
$mail->send();//发送邮件
?>