php mail函数类

class.email.php
<?
class  email {
    
// ---设置全局变量
     var   $mailto   =   "" //  收件人
     var   $mailcc   =   "" //  抄送
     var   $mailbcc   =   "" //  秘密抄送
     var   $mailfrom   =   "" //  发件人
     var   $mailsubject   =   "" //  主题
     var   $mailtext   =   "" //  文本格式的信件主体
     var   $mailhtml   =   "" //  html格式的信件主体
     var   $mailattachments   =   "" //  附件
     /*  函数setto($inaddress) :用于处理邮件的地址 参数 $inaddress
    为包涵一个或多个字串,email地址变量,使用逗号来分割多个邮件地址
    默认返回值为true
    *********************************************************
*/
    
function  setto( $inaddress ){
    
// --用explode()函数根据”,”对邮件地址进行分割
     $addressarray   =   explode " , " , $inaddress );
    
// --通过循环对邮件地址的合法性进行检查
     for ( $i = 0 ; $i < count ( $addressarray ); $i ++ ){  if ( $this -> checkemail( $addressarray [ $i ]) == false return   false ; }
    
// --所有合法的email地址存入数组中
     $this -> mailto  =   implode ( $addressarray ,   " , " );
//     echo "<b>TO:" . $addressarray[0] ."</b>";
     return   true ; }
    
/* *************************************************
    函数 setcc($inaddress) 设置抄送人邮件地址
    参数 $inaddress 为包涵一个或多个邮件地址的字串,email地址变量,
    使用逗号来分割多个邮件地址 默认返回值为true
    *************************************************************
*/
    
function  setcc( $inaddress ){
    
// --用explode()函数根据”,”对邮件地址进行分割
     $addressarray   =   explode " , " , $inaddress );
    
// --通过循环对邮件地址的合法性进行检查
     for ( $i = 0 ; $i < count ( $addressarray ); $i ++ ){  if ( $this -> checkemail( $addressarray [ $i ]) == false return   false ; }
    
// --所有合法的email地址存入数组中
     $this -> mailcc  =   implode ( $addressarray ,   " , " );
    
return   true ; }
    
/* **************************************************
    函数setbcc($inaddress) 设置秘密抄送地址 参数 $inaddress 为包涵一个或多
    个邮件地址的字串,email地址变量,使用逗号来分割多个邮件地址 默认返回值为
    true
    *****************************************
*/
    
function  setbcc( $inaddress ){
    
// --用explode()函数根据”,”对邮件地址进行分割
     $addressarray   =   explode " , " , $inaddress );
    
// --通过循环对邮件地址的合法性进行检查
     for ( $i = 0 ; $i < count ( $addressarray ); $i ++ )
    { 
if ( $this -> checkemail( $addressarray [ $i ]) == false )
    
return   false ;
    }
    
// --所有合法的email地址存入数组中
     $this -> mailbcc  =   implode ( $addressarray ,   " , " );
    
return   true ;
    }
    
/* ****************************************************************
    函数setfrom($inaddress):设置发件人地址 参数 $inaddress 为包涵邮件
    地址的字串默认返回值为true
    **************************************
*/
    
function  setfrom( $inaddress ){
    
if ( $this -> checkemail( $inaddress )){
    
$this -> mailfrom  =   $inaddress ;
    
return   true ;
    } 
return   false ; }
    
/* *********************
    函数 setsubject($insubject) 用于设置邮件主题参数$insubject为字串,
    默认返回的是true
    ******************************************
*/
    
function  setsubject( $insubject ){
    
if ( strlen ( trim ( $insubject ))  >   0 ){
    
$this -> mailsubject  =   ereg_replace " " ,   "" , $insubject );
    
return   true ; }
    
return   false ; }
    
/* ***************************************************
    函数settext($intext) 设置文本格式的邮件主体参数 $intext 为文本内容默
    认返回值为true
    ***************************************
*/
    
function  settext( $intext ){
    
if ( strlen ( trim ( $intext ))  >   0 ){
    
$this -> mailtext  =   $intext ;
    
return   true ; }
    
return   false ;
    }
    
/* *********************************
    函数sethtml($inhtml) 设置html格式的邮件主体参数$inhtml为html格式,
    默认返回值为true
    ***********************************
*/
    
function  sethtml( $inhtml ){
    
if ( strlen ( trim ( $inhtml ))  >   0 ){
    
$this -> mailhtml  =   $inhtml ;
    
return   true ; }
    
return   false ; }
    
/* *********************
    函数 setattachments($inattachments) 设置邮件的附件 参数$inattachments
    为一个包涵目录的字串,也可以包涵多个文件用逗号进行分割 默认返回值为true
    ******************************************
*/
    
function  setattachments( $inattachments ){
    
if ( strlen ( trim ( $inattachments ))  >   0 ){
    
$this -> mailattachments  =   $inattachments ;
    
return   true ; }
    
return   false ; }
    
/* ********************************
    函数 checkemail($inaddress) :这个函数我们前面已经调用过了,主要就是
    用于检查email地址的合法性
    ****************************************
*/
    
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~,
    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 ++ ){
    
// --寻找起始位置
     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 ));
    } 
return   false ;
    }
    
/* ****************************************
    函数 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 " ;
    
default :   return   " application/octet-stream " ;
    }
    
return   " application/octet-stream " ;
    }
    
/* *********************************************
    函数formattextheader把文本内容加上text的文件头
    ****************************************************
*/
    
function  formattextheader(){  $outtextheader   =   "" ;
    
$outtextheader   .=   " content-type: text/plain;
    charset=us-ascii
" ;
    
$outtextheader   .=   " content-transfer-encoding: 7bit " ;
    
$outtextheader   .=   $this -> mailtext .   " " ;
    
return   $outtextheader ;
    } 
/* ***********************************************
    函数formathtmlheader()把邮件主体内容加上html的文件头
    *****************************************
*/
    
function  formathtmlheader(){
    
$outhtmlheader   =   "" ;
    
$outhtmlheader   .=   " content-type: text/html;
    charset=us-ascii
" ;
    
$outhtmlheader   .=   " content-transfer-encoding: 7bit " ;
    
$outhtmlheader   .=   $this -> mailtext  .   " "   .   $this -> mailhtml  .   " " ;
    
return   $outhtmlheader ;
    }
    
/* *********************************
    函数 formatattachmentheader($infilelocation) 把邮件中的附件标识出来
    *******************************
*/
    
function  formatattachmentheader( $infilelocation ){
    
$outattachmentheader   =   "" ;
    
// --用上面的函数getcontenttype($infilelocation)得出附件类型
     $contenttype   =   $this -> getcontenttype( $infilelocation );
    
// --如果附件是文本型则用标准的7位编码
     if ( ereg " text " , $contenttype )){
    
$outattachmentheader   .=   " content-type:  " . $contenttype .   " ; " ;
    
$outattachmentheader   .=   '  name=" ' . basename ( $infilelocation ) .   ' " ' .   " " ;
    
$outattachmentheader   .=   " content-transfer-encoding: 7bit " ;
    
$outattachmentheader   .=   " content-disposition: attachment; " ;
    
$outattachmentheader   .=   '  filename=" ' . basename ( $infilelocation ) .   ' " ' .   " " ;
    
$textfile   =   fopen ( $infilelocation ,   " r " );
    
while ( ! feof ( $textfile )){
    
$outattachmentheader   .=   fgets ( $textfile , 1000 );
    }
    
// --关闭文件 fclose($textfile);
     $outattachmentheader   .=   " " ;
    }
    
// --非文本格式则用64位进行编码
     else $outattachmentheader   .=   " content-type:  " . $contenttype .   " ; " ;
    
$outattachmentheader   .=   '  name=" ' . basename ( $infilelocation ) .   ' " ' .   " " ;
    
$outattachmentheader   .=   " content-transfer-encoding: base64 " ;
    
$outattachmentheader   .=   " content-disposition: attachment; " ;
    
$outattachmentheader   .=   '  filename=" ' . basename ( $infilelocation ) .   ' " ' .   " " ;
    
// --调用外部命令uuencode进行编码
     exec " uuencode -m $infilelocation nothing_out " , $returnarray );
    
for  ( $i   =   1 $i < ( count ( $returnarray ));  $i ++ ){
    
$outattachmentheader   .=   $returnarray [ $i ] .   " " ;
    }
    } 
return   $outattachmentheader ;
    }
    
/* *****************************
    函数 send()用于发送邮件,发送成功返回值为true
    ***********************************
*/
    
function  send(){
    
// --设置邮件头为空
     $mailheader   =   "" ;
    
// 邮件体
     $mailbody   =   "" ;
    
// --添加抄送人
     if ( $this -> mailcc  !=   "" )
    
$mailheader   .=   " cc:  " . $this -> mailcc .   " " ;
    
// --添加秘密抄送人
     if ( $this -> mailbcc  !=   "" )
    
$mailheader   .=   " bcc:  " . $this -> mailbcc .   " " ;
    
// --添加发件人
     if ( $this -> mailfrom  !=   "" )
    
$mailheader   .=   " from:  " . $this -> mailfrom .   " " ;
    
// --设置 mime-版本
     $mailheader   .=   " mime-version: 1.0 " ;

    
// ---------------------------邮件格式------------------------------
    //--文本格式

     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();
   
    
$mailheader   .=   " content-type: multipart/alternative; " ;
    
$mailheader   .=   '  boundary=" ' . $bodyboundary .   ' " ' ;
    
$mailheader   .=   " " ;
    
// --添加邮件主体和边界
     $mailbody   .=   " -- " . $bodyboundary .   " " ;
    
$mailbody   .=   $textheader ;
    
$mailbody   .=   " -- " . $bodyboundary .   " " ;
    
// --添加html标签
     $mailbody   .=   $htmlheader ;
    
$mailbody   .=   " -- " . $bodyboundary .   " -- " ;
    
// --发送邮件
     return   mail ( $this -> mailto , $this -> mailsubject ,   $mailbody , $mailheader );
    }
    
// --文本加html加附件
     else   if ( $this -> mailtext  !=   ""   &&   $this -> mailhtml  !=   ""   &&   $this -> mailattachments  !=   "" ){
    
$attachmentboundary   =   $this -> getrandomboundary();
    
$mailheader   .=   " content-type: multipart/mixed; " ;
    
$mailheader   .=   '  boundary=" ' . $attachmentboundary .   ' " ' .   " " ;
    
$mailheader   .=   " this is a multi-part message in mime format. " ;
    
$mailheader   .=   " -- " . $attachmentboundary .   " " ;
    
$mailbody   =   $mailheader ;

    
$bodyboundary   =   $this -> getrandomboundary( 1 );
    
$textheader   =   $this -> formattextheader();
    
$htmlheader   =   $this -> formathtmlheader();
    
$mailbody   .=   " content-type: multipart/alternative; " ;
    
$mailbody   .=   '  boundary=" ' . $bodyboundary .   ' " ' ;
    
$mailbody   .=   " " ;
    
$mailbody   .=   " -- " . $bodyboundary .   " " ;
    
$mailbody   .=   $textheader ;
    
$mailbody   .=   " -- " . $bodyboundary .   " " ;
    
$mailbody   .=   $htmlheader ;
    
$mailbody   .=   " -- " . $bodyboundary .   " -- " ;

    
// --获取附件值
     $attachmentarray   =   explode " , " , $this -> mailattachments);
    
// --根据附件的个数进行循环
     for ( $i = 0 ; $i < count ( $attachmentarray ); $i ++ ){
        
// --分割 $mailbody .= " --".$attachmentboundary. " ";
         $mailbody   .=   " -- " . $attachmentboundary .   " " ;
        
// --附件信息
         $mailbody   .=   $this -> formatattachmentheader( $attachmentarray [ $i ]);
    }
        
$mailbody   .=   " -- " . $attachmentboundary .   " -- " ;
        
return   mail ( $this -> mailto , $this -> mailsubject ,   $mailbody , $mailheader );
    }
        
return   false ;
    }
}
?>


mailtest.php
<?  
include  ( " class.email.php " );

 
echo   realpath ( " f1.txt " );

$mail   =   new  email();
$mail -> setto( " xxx@xxx " );  // 收件人 
//$mail->setcc("b@b.com,c@c.com"); //抄送 
//$mail->setcc("d@b.com,e@c.com"); //秘密抄送 

$mail -> setfrom( " xa@xd.com " ); // 发件人 
$mail -> setsubject( " subject " ) ;  // 主题 
$mail -> settext( " test mail " ) ; // 发送文本格式也可以是变量 
$mail -> sethtml( " html part " ) ; // 发送html格式也可以是变量 
$mail -> setattachments(   realpath ( " f1.txt " .   " , "   .     realpath ( " f2.txt " )  ) ; // 添加附件,需表明路径 
$mail -> send();  // 发送邮件 
echo   " <br><b>Mail send!</b> " ;

?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值