给你个类:辅助页面的自己写吧!
<?php 
/******************************************************************************* 
    Name:            Email 
    Description:    This class is used for sending emails.   
            These emails can be 
            Plain Text, HTML, or Both. Other uses include file 
            Attachments and email Templates(from a file). 
    Testing: 
        test_email.php3:         $mail->setTo("[email protected]"); 
        $mail->send();                          
    Changelog: 
    Date        Name            Description 
    ----------- -----------     ------------------------------------------------ 
    01/01/2000    yhlong.h        created 
*******************************************************************************/ 
/******************************************************************************* 
    Issues: 
        no error reporting 
        can only send HTML with TEXT 
        can only send attachements with HTML and TEXT 
*******************************************************************************/ 
/******************************************************************************* 
    Function Listing: 
        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 

    //---Global Variables 
    var $mailTo                = "";                        // array of To addresses 
    var $mailCC                = "";                        // copied recipients 
    var $mailBCC            = "";                        // hidden recipients 
    var $mailFrom            = "";                        // from address 
    var $mailSubject        = "";                        // email subject 
    var $mailText            = "";                        // plain text message 
    var $mailHTML            = "";                        // html message 
    var $mailAttachments    = "";                        // array of attachments /******************************************************************************* 
    Function:        setTo($inAddress) 
    Description:    sets the email To address 
    Arguments:        $inAddress as string 
                    separate multiple values with comma 
    Returns:        true if set 
*******************************************************************************/ 
    function setTo($inAddress){ 
        //--split addresses at commas 
        $addressArray = explode(",",$inAddress); 
        //--loop through each address and exit on error 
        for($i=0;$i<count($addressArray);$i++){ 
            if($this->checkEmail($addressArray[$i])==false) return false; 
        } 
        //--all values are OK so implode array into string 
        $this->mailTo = implode($addressArray,","); 
        return true; 
    } 
/******************************************************************************* 
    Function:        setCC($inAddress) 
    Description:    sets the email cc address 
    Arguments:        $inAddress as string 
                    separate multiple values with comma 
    Returns:        true if set 
*******************************************************************************/ 
    function setCC($inAddress){ 
        //--split addresses at commas 
        $addressArray = explode(",",$inAddress); 
        //--loop through each address and exit on error 
        for($i=0;$i<count($addressArray);$i++){ 
            if($this->checkEmail($addressArray[$i])==false) return false; 
        } 
        //--all values are OK so implode array into string 
        $this->mailCC = implode($addressArray,","); 
        return true; 
    } 
/******************************************************************************* 
    Function:        setBCC($inAddress) 
    Description:    sets the email bcc address 
    Arguments:        $inAddress as string 
                    separate multiple values with comma 
    Returns:        true if set 
*******************************************************************************/ 
    function setBCC($inAddress){ 
        //--split addresses at commas 
        $addressArray = explode(",",$inAddress); 
        //--loop through each address and exit on error 
        for($i=0;$i<count($addressArray);$i++){ 
            if($this->checkEmail($addressArray[$i])==false) return false; 
        } 
        //--all values are OK so implode array into string 
        $this->mailBCC = implode($addressArray,","); 
        return true; 
    } 
/******************************************************************************* 
    Function:        setFrom($inAddress) 
    Description:    sets the email FROM address 
    Arguments:        $inAddress as string (takes single email address) 
    Returns:        true if set 
*******************************************************************************/ 
    function setFrom($inAddress){ 
        if($this->checkEmail($inAddress)){ 
            $this->mailFrom = $inAddress; 
            return true; 
        } 
        return false; 
    } 
/******************************************************************************* 
    Function:        setSubject($inSubject) 
    Description:    sets the email subject 
    Arguments:        $inSubject as string 
    Returns:        true if set 
*******************************************************************************/ 
    function setSubject($inSubject){ 
        if(strlen(trim($inSubject)) > 0){ 
            $this->mailSubject = ereg_replace("\n","",$inSubject); 
            return true; 
        } 
        return false; 
    } 
/******************************************************************************* 
    Function:        setText($inText) 
    Description:    sets the email text 
    Arguments:        $inText as string 
    Returns:        true if set 
*******************************************************************************/ 
    function setText($inText){ 
        if(strlen(trim($inText)) > 0){ 
            $this->mailText = $inText; 
            return true; 
        } 
        return false; 
    } 
/******************************************************************************* 
    Function:        setHTML($inHTML) 
    Description:    sets the email HMTL 
    Arguments:        $inHTML as string 
    Returns:        true if set 
*******************************************************************************/ 
    function setHTML($inHTML){ 
        if(strlen(trim($inHTML)) > 0){ 
            $this->mailHTML = $inHTML; 
            return true; 
        } 
        return false; 
    } 
/******************************************************************************* 
    Function:        setAttachments($inAttachments) 
    Description:    stores the Attachment string 
    Arguments:        $inAttachments as string with directory included 
                    separate multiple values with comma 
    Returns:        true if stored 
*******************************************************************************/ 
    function setAttachments($inAttachments){ 
        if(strlen(trim($inAttachments)) > 0){ 
            $this->mailAttachments = $inAttachments; 
            return true; 
        }         
        return false; 
    } 
/******************************************************************************* 
    Function:        checkEmail($inAddress) 
    Description:    checks for valid email 
    Arguments:        $inAddress as string 
    Returns:        true if valid 
*******************************************************************************/ 
    function checkEmail($inAddress){ 
        return (ereg( "^[^@ ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$",$inAddress)); 
    } 
/******************************************************************************* 
    Function:        loadTemplate($inFileLocation,$inHash,$inFormat) 
    Description:    reads in a template file and replaces hash values 
    Arguments:        $inFileLocation as string with relative directory 
                    $inHash as Hash with populated values 
                    $inFormat as string either "text" or "html" 
    Returns:        true if loaded 
*******************************************************************************/ 
    function loadTemplate($inFileLocation,$inHash,$inFormat){ 
        /* 
        template files have lines such as: 
            Dear ~!UserName~, 
            Your address is ~!UserAddress~ 
        */ 
        //--specify template delimeters 
        $templateDelim = "~"; 
        $templateNameStart = "!"; 
        //--set out string 
        $templateLineOut = ""; 
        //--open template file 
        if($templateFile = fopen($inFileLocation,"r")){ 
            //--loop through file, line by line 
            while(!feof($templateFile)){ 
                //--get 1000 chars or (line break internal to fgets) 
                $templateLine = fgets($templateFile,1000); 
                //--split line into array of hashNames and regular sentences 
                $templateLineArray = explode($templateDelim,$templateLine); 
                //--loop through array 
                for( $i=0; $i<count($templateLineArray);$i++){ 
                    //--look for $templateNameStart at position 0 
                    if(strcspn($templateLineArray[$i],$templateNameStart)==0){ 
                        //--get hashName after $templateNameStart 
                        $hashName = substr($templateLineArray[$i],1); 
                        //--replace hashName with acual value in $inHash 
                        //--(string) casts all values as "strings" 
                        $templateLineArray[$i] = ereg_replace($hashName,(string)$inHash[$hashName],$hashName); 
                    } 
                } 
                //--output array as string and add to out string 
                $templateLineOut .= implode($templateLineArray,"");         
            } 
            //--close file         
            fclose($templateFile); 
            //--set Mail body to proper format 
            if( strtoupper($inFormat)=="TEXT" ) return($this->setText($templateLineOut)); 
            else if( strtoupper($inFormat)=="HTML" ) return($this->setHTML($templateLineOut)); 
        } 
        return false; 
    } 
/******************************************************************************* 
    Function:        getRandomBoundary($offset) 
    Description:    returns a random boundary 
    Arguments:        $offset as integer - used for multiple calls 
    Returns:        string 
*******************************************************************************/ 
    function getRandomBoundary($offset = 0){ 
        //--seed random number generator 
        srand(time()+$offset); 
        //--return md5 32 bits plus 4 dashes to make 38 chars 
        return ("----".(md5(rand()))); 
    } 
/******************************************************************************* 
    Function:        getContentType($inFileName) 
    Description:    returns content type for the file type 
    Arguments:        $inFileName as file name string (can include path) 
    Returns:        string 
*******************************************************************************/ 
    function getContentType($inFileName){ 
        //--strip path 
        $inFileName = basename($inFileName); 
        //--check for no extension 
        if(strrchr($inFileName,".") == false){ 
            return "application/octet-stream"; 
        } 
        //--get extension and check cases 
        $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"; 
    } 
/******************************************************************************* 
    Function:        formatTextHeader 
    Description:    returns a formated header for text 
    Arguments:        none 
    Returns:        string 
*******************************************************************************/ 
    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; 
    } 
/******************************************************************************* 
    Function:        formatHTMLHeader 
    Description:    returns a formated header for HTML 
    Arguments:        none 
    Returns:        string 
*******************************************************************************/ 
    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; 
    } 
/******************************************************************************* 
    Function:        formatAttachmentHeader($inFileLocation) 
    Description:    returns a formated header for an attachment 
    Arguments:        $inFileLocation as string with relative directory 
    Returns:        string 
*******************************************************************************/ 
    function formatAttachmentHeader($inFileLocation){ 
        $outAttachmentHeader = ""; 
        //--get content type based on file extension 
        $contentType = $this->getContentType($inFileLocation); 
        //--if content type is TEXT the standard 7bit encoding 
        if(ereg("text",$contentType)){ 
            //--format header 
            $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"); 
            //--loop through file, line by line 
            while(!feof($textFile)){ 
                //--get 1000 chars or (line break internal to fgets) 
                $outAttachmentHeader .= fgets($textFile,1000); 
            } 
            //--close file         
            fclose($textFile); 
            $outAttachmentHeader .= "\n"; 
        } 
        //--NON-TEXT use 64-bit encoding 
        else{ 
            //--format header 
            $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"; 
            //--call uuencode - output is returned to the return array 
            exec("uuencode -m $inFileLocation nothing_out",$returnArray); 
            //--add each line returned 
            for ($i = 1; $i<(count($returnArray)); $i++){  
                $outAttachmentHeader .= $returnArray[$i]."\n"; 
            } 
        }     
        return $outAttachmentHeader; 
    } 
/******************************************************************************* 
    Function:        send() 
    Description:    sends the email 
    Arguments:        none 
    Returns:        true if sent 
*******************************************************************************/ 
    function send(){ 
        //--set  mail header to blank 
        $mailHeader = ""; 
        //--add CC 
        if($this->mailCC != "") $mailHeader .= "CC: ".$this->mailCC."\n"; 
        //--add BCC 
        if($this->mailBCC != "") $mailHeader .= "BCC: ".$this->mailBCC."\n"; 
        //--add From 
        if($this->mailFrom != "") $mailHeader .= "FROM: ".$this->mailFrom."\n";         //---------------------------MESSAGE TYPE------------------------------- 
        //--TEXT ONLY 
        if($this->mailText != "" && $this->mailHTML == "" && $this->mailAttachments == ""){ 
            return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader); 
        }         
        //--HTML AND TEXT 
        else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments == ""){ 
            //--get random boundary for content types 
            $bodyBoundary = $this->getRandomBoundary(); 
            //--format headers 
            $textHeader = $this->formatTextHeader(); 
            $htmlHeader = $this->formatHTMLHeader(); 
            //--set MIME-Version 
            $mailHeader .= "MIME-Version: 1.0\n"; 
            //--set up main content header with boundary 
            $mailHeader .= "Content-Type: multipart/alternative;\n"; 
            $mailHeader .= ' boundary="'.$bodyBoundary.'"'; 
            $mailHeader .= "\n\n\n"; 
            //--add body and boundaries 
            $mailHeader .= "--".$bodyBoundary."\n"; 
            $mailHeader .= $textHeader; 
            $mailHeader .= "--".$bodyBoundary."\n"; 
            //--add html and ending boundary 
            $mailHeader .= $htmlHeader; 
            $mailHeader .= "\n--".$bodyBoundary."--"; 
            //--send message 
            return mail($this->mailTo,$this->mailSubject,"",$mailHeader); 
        } 
        //--HTML AND TEXT AND ATTACHMENTS 
        else if($this->mailText != "" && $this->mailHTML != "" && $this->mailAttachments != ""){ 
             
            //--get random boundary for attachments 
            $attachmentBoundary = $this->getRandomBoundary(); 
            //--set main header for all parts and boundary 
            $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 AND HTML-- 
            //--get random boundary for content types 
            $bodyBoundary = $this->getRandomBoundary(1); 
            //--format headers 
            $textHeader = $this->formatTextHeader(); 
            $htmlHeader = $this->formatHTMLHeader(); 
            //--set MIME-Version 
            $mailHeader .= "MIME-Version: 1.0\n"; 
            //--set up main content header with boundary 
            $mailHeader .= "Content-Type: multipart/alternative;\n"; 
            $mailHeader .= ' boundary="'.$bodyBoundary.'"'; 
            $mailHeader .= "\n\n\n"; 
            //--add body and boundaries 
            $mailHeader .= "--".$bodyBoundary."\n"; 
            $mailHeader .= $textHeader; 
            $mailHeader .= "--".$bodyBoundary."\n"; 
            //--add html and ending boundary 
            $mailHeader .= $htmlHeader; 
            $mailHeader .= "\n--".$bodyBoundary."--"; 
            //--send message 
            //--END TEXT AND HTML 
             
            //--get array of attachment filenames 
            $attachmentArray = explode(",",$this->mailAttachments); 
            //--loop through each attachment 
            for($i=0;$i<count($attachmentArray);$i++){ 
                //--attachment separator 
                $mailHeader .= "\n--".$attachmentBoundary."\n"; 
                //--get attachment info 
                $mailHeader .= $this->formatAttachmentHeader($attachmentArray[$i]); 
            } 
            $mailHeader .= "--".$attachmentBoundary."--"; 
            return mail($this->mailTo,$this->mailSubject,"",$mailHeader); 
        } 
        return false; 
    } 

?>