onClick="window.close()"> /*
A class for sending mime based email. It can send:

HTML Email 
HTML Email with embedded images 
HTML Email with attachments 
HTML Email with embedded images and attachments 
Text email 
Text email with attachments 
NOTE: This is merely an object designed for inclusion in your own scripts / applications. 

usage:

/***************************************
** Title.........: HTML Mime Mail class
** Version.......: 1.1
** Author........: Richard Heyes <[email protected]>
** Filename......: function.definitions.txt
** Last changed..: 15/4/2000
** Notes.........: Based upon mime_mail.class
**                 by Tobias Ratschiller <[email protected]>
**                 and Sascha Schumann <[email protected]>.
**                 Thanks to Thomas Flemming for supplying a fix
**                 for Win32.
***************************************/

Function definitions:

void html_mime_mail([string headers])

        Constructor function.
         - headers can be used to add extra headers to the email (except for From: ).

void add_html(string html, string text)

        Makes the email html based.
         - html is the html version of the body.
         - text is the plain text version of the body.

void build_html(string orig_boundary)

        Builds the html body of the email.
         - orig_boundary is the first boundary marker.

void add_html_image(string file, [string name], [string c_type])

        Adds an image to the list of embedded images.
         - file should contain the image, (Eg. $file = fread(...)).
         - name is the name of the image.
         - c_type is the content type of the image.

void add_attachment(string file, [string name], [string c_type])

        Adds a file to the list of attachments
         - file should contain the attachment, (Eg. $file = fread(...)).
         - name is the name of the file.
         - c_type is the content type of the file.

void build_html_image(int i)

        Adds one of the embedded images from the list to the email.
         - i indicates the position in the images array.

string message_part build_part(int i)

        Adds one of the attachments from the list to the email.
         - i indicates the position in the attachments array.

void build_message(void)

        Starts the building of the email.

void send(string to_name, string to_addr, string from_name, string from_addr, [string subject], [string headers])

        Sends the email to the address given. Addresses will be given
        this format:
         - to_name is the name of the recipient. If unknown give a blank string.
         - to_addr is the address of the recipient.
         - from_name is the name of the sender. If unknown give a blank string.
         - from_addr is the address of the sender.
         - subject is the subject of the email.
         - headers is for extra headers for the email.

void smtp_send(string *NAME* of smtp object, string from address, array To addresses, array headers, string body)

      Sends the email using Manuel Lemos' smtp mail delivery class (available at http://phpclasses.upperdesign.com).

Examples uages:

<?php
/***************************************
** Title.........: HTML Mime Mail class
** Version.......: 1.2
** Author........: Richard Heyes <[email protected]>
** Filename......: example.php3
** Last changed..: 24s/05/2000
** Notes.........: Based upon mime_mail.class
**                 by Tobias Ratschiller <[email protected]>
**                 and Sascha Schumann <[email protected]>.
**                  - Thanks to Thomas Flemming for supplying a fix
**                    for Win32.
**                  - Made headers terminated by CRLF instead of LF, now
**                    compliant with RFC822. Thanks to Pao-Hsi Huang.
**                  - Fixed bug; certain mail systems (gmx.net in particular)
**                    were rejecting mail because of a space character either
**                    side of the equal sign on the boundary line. Thanks to
**                    Peter Holm for notifying me.
***************************************/

        
error_reporting(63);
        include(
'class.html_mime_mail.inc');

/***************************************
** Example of usage.
***************************************/
        /***************************************
        ** Read the file background.gif into
        ** $backgrnd.
        ***************************************/
        
$filename 'background.gif';
        
$backgrnd fread($fp fopen($filename'r'), filesize($filename));
        
fclose($fp);

        
/***************************************
        ** Read the file test.zip into $attachment.
        ***************************************/
        
$filename 'example.zip';
        
$attachment fread($fp fopen($filename'r'), filesize($filename));
        
fclose($fp);

        
/***************************************
        ** Create the mail object. Optional headers
        ** argument. Do not put From: here, this
        ** will be added when $mail->send
        ***************************************/
        
$mail = new html_mime_mail("X-Mailer: Html Mime Mail Class\r\n");

        
/***************************************
        ** If sending an html email, then these
        ** two variables specify the text and
        ** html versions of the mail. Don't
        ** have to be named as these are. Just
        ** make sure the names tie in to the
        ** $mail->add_html() command further down.
        ***************************************/
        
$text 'This is a test.';
        
$html '<HTML><BODY BACKGROUND="background.gif"><FONT FACE="Verdana, Arial" COLOR="#FF0000">&nbsp;&nbsp;&nbsp;&nbsp;Success!</FONT><P></BODY></HTML>';

        
/***************************************
        ** Add the text, html and embedded images.
        ** Each embedded image has to be added
        ** using $mail->add_html_image() BEFORE
        ** calling $mail->add_html(). The name
        ** of the image should match exactly
        ** (case-sensitive) to the name in the html.
        ***************************************/
        
$mail->add_html_image($backgrnd'background.gif''image/gif');
        
$mail->add_html($html$text);

        
/***************************************
        ** If not sending an html email, then
        ** this is used to set the plain text
        ** body of the email.
        ***************************************/
        // $mail->body = 'ftfuygfyugyguilgulghlgjhlgjhlkgjguilguilguil ghjli';

        /***************************************
        ** This is used to add an attachment to
        ** the email.
        ***************************************/
        
$mail->add_attachment($attachment'example.zip''application/octet-stream');

        
/***************************************
        ** Builds the message.
        ***************************************/
        
$mail->build_message();

        
/***************************************
        ** Sends the message. $mail->build_message()
        ** is seperate to $mail->send so that the
        ** same email can be sent many times to
        ** differing recipients simply by putting
        ** $mail->send() in a loop.
        ***************************************/
        
$mail->send('To Name''richard.heyes@localhost''From Name''From Address''Subject');

        
/***************************************
        ** Debug stuff. Entirely unnecessary.
        ***************************************/
        
echo '<PRE>';
        echo 
$mail->mime;
        echo 
'</PRE>';
?>

*/

<?php
/***************************************
** Title.........: HTML Mime Mail class
** Version.......: 1.2
** Author........: Richard Heyes <[email protected]>
** Filename......: html_mime_mail.class
** Last changed..: 24/05/2000
** Notes.........: Based upon mime_mail.class
**                 by Tobias Ratschiller <[email protected]>
**                 and Sascha Schumann <[email protected]>.
**                  - Thanks to Thomas Flemming for supplying a fix
**                    for Win32.
**                  - Made headers terminated by CRLF instead of LF, now
**                    compliant with RFC822. Thanks to Pao-Hsi Huang.
**                  - Fixed bug; certain mail systems (gmx.net in particular)
**                    were rejecting mail because of a space character either
**                    side of the equal sign on the boundary line. Thanks to
**                    Peter Holm for notifying me.
***************************************/

class html_mime_mail{

        var 
$headers;
        var 
$body;
        var 
$multipart;
        var 
$mime;
        var 
$html;
        var 
$html_text;
        var 
$html_images = array();
        var 
$cids = array();
        var 
$do_html;
        var 
$parts = array();

/***************************************
** Constructor function. Sets the headers
** if supplied.
***************************************/
        
function html_mime_mail($headers ''){
                
$this->headers $headers;
        }

/***************************************
** Adds a html part to the mail.
** Also replaces image names with
** content-id's.
***************************************/
        
function add_html($html$text){
                
$this->do_html 1;
                
$this->html $html;
                
$this->html_text $text;
                if(
is_array($this->html_images) AND count($this->html_images) > 0){
                        for(
$i=0$i<count($this->html_images); $i++){
                                
$this->html ereg_replace($this->html_images[$i]['name'], 'cid:'.$this->html_images[$i]['cid'], $this->html);
                        }
                }
        }

/***************************************
** Builds html part of email.
***************************************/
        
function build_html($orig_boundary){
                
$sec_boundary '=_'.md5(uniqid(time()));
                
$thr_boundary '=_'.md5(uniqid(time()));

                if(!
is_array($this->html_images)){
                        
$this->multipart.= '--'.$orig_boundary."\r\n";
                        
$this->multipart.= 'Content-Type: multipart/alternative; boundary="'.$sec_boundary."\"\r\n\r\n\r\n";

                        
$this->multipart.= '--'.$sec_boundary."\r\n";
                        
$this->multipart.= 'Content-Type: text/plain'."\r\n";
                        
$this->multipart.= 'Content-Transfer-Encoding: 7bit'."\r\n\r\n";
                        
$this->multipart.= $this->html_text."\r\n\r\n";

                        
$this->multipart.= '--'.$sec_boundary."\r\n";
                        
$this->multipart.= 'Content-Type: text/html'."\r\n";
                        
$this->multipart.= 'Content-Transfer-Encoding: 7bit'."\r\n\r\n";
                        
$this->multipart.= $this->html."\r\n\r\n";
                        
$this->multipart.= '--'.$sec_boundary."--\r\n\r\n";
                }else{
                        
$this->multipart.= '--'.$orig_boundary."\r\n";
                        
$this->multipart.= 'Content-Type: multipart/related; boundary="'.$sec_boundary."\"\r\n\r\n\r\n";

                        
$this->multipart.= '--'.$sec_boundary."\r\n";
                        
$this->multipart.= 'Content-Type: multipart/alternative; boundary="'.$thr_boundary."\"\r\n\r\n\r\n";

                        
$this->multipart.= '--'.$thr_boundary."\r\n";
                        
$this->multipart.= 'Content-Type: text/plain'."\r\n";
                        
$this->multipart.= 'Content-Transfer-Encoding: 7bit'."\r\n\r\n";
                        
$this->multipart.= $this->html_text."\r\n\r\n";

                        
$this->multipart.= '--'.$thr_boundary."\r\n";
                        
$this->multipart.= 'Content-Type: text/html'."\r\n";
                        
$this->multipart.= 'Content-Transfer-Encoding: 7bit'."\r\n\r\n";
                        
$this->multipart.= $this->html."\r\n\r\n";
                        
$this->multipart.= '--'.$thr_boundary."--\r\n\r\n";

                        for(
$i=0$i<count($this->html_images); $i++){
                                
$this->multipart.= '--'.$sec_boundary."\r\n";
                                
$this->build_html_image($i);
                        }

                        
$this->multipart.= "--".$sec_boundary."--\r\n\r\n";
                }
        }
/***************************************
** Adds an image to the list of embedded
** images.
***************************************/
        
function add_html_image($file$name ''$c_type='application/octet-stream'){
                
$this->html_images[] = array( 'body' => $file,
                                              
'name' => $name,
                                              
'c_type' => $c_type,
                                              
'cid' => md5(uniqid(time())) );
        }


/***************************************
** Adds a file to the list of attachments.
***************************************/
        
function add_attachment($file$name ''$c_type='application/octet-stream'){
                
$this->parts[] = array( 'body' => $file,
                                        
'name' => $name,
                                        
'c_type' => $c_type );
        }

/***************************************
** Builds an embedded image part of an
** html mail.
***************************************/
        
function build_html_image($i){
                
$this->multipart.= 'Content-Type: '.$this->html_images[$i]['c_type'];

                if(
$this->html_images[$i]['name'] != ''$this->multipart .= '; name="'.$this->html_images[$i]['name']."\"\r\n";
                else 
$this->multipart .= "\r\n";

                
$this->multipart.= 'Content-ID: <'.$this->html_images[$i]['cid'].">\r\n";
                
$this->multipart.= 'Content-Transfer-Encoding: base64'."\r\n\r\n";
                
$this->multipart.= chunk_split(base64_encode($this->html_images[$i]['body']))."\r\n";
        }

/***************************************
** Builds a single part of a multipart
** message.
***************************************/
        
function build_part($i){
                
$message_part '';
                
$message_part.= 'Content-Type: '.$this->parts[$i]['c_type'];
                if(
$this->parts[$i]['name'] != '')
                        
$message_part .= '; name="'.$this->parts[$i]['name']."\"\r\n";
                else
                        
$message_part .= "\r\n";

                
// Determine content encoding.
                
if($this->parts[$i]['c_type'] == 'text/plain'){
                        
$message_part.= 'Content-Transfer-Encoding: 7bit'."\r\n\r\n";
                        
$message_part.= $this->parts[$i]['body']."\r\n";
                }else{
                        
$message_part.= 'Content-Transfer-Encoding: base64'."\r\n";
                        
$message_part.= 'Content-Disposition: attachment; filename="'.$this->parts[$i]['name']."\"\r\n\r\n";
                        
$message_part.= chunk_split(base64_encode($this->parts[$i]['body']))."\r\n";
                }

                return 
$message_part;
        }

/***************************************
** Builds the multipart message from the
** list ($this->parts).
***************************************/
        
function build_message(){
                
$boundary '=_'.md5(uniqid(time()));

                
$this->headers.= "MIME-Version: 1.0\r\n";
                
$this->headers.= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
                
$this->multipart '';
                
$this->multipart.= "This is a MIME encoded message.\r\nCreated by html_mime_mail.class.\r\nSee http://www.heyes-computing.net/scripts/ for a copy.\r\n\r\n";

                if(isset(
$this->do_html) AND $this->do_html == 1$this->build_html($boundary);
                if(isset(
$this->body) AND $this->body != ''$this->parts[] = array('body' => $this->body'name' => '''c_type' => 'text/plain');

                for(
$i=(count($this->parts)-1); $i>=0$i--){
                        
$this->multipart.= '--'.$boundary."\r\n".$this->build_part($i);
                }

                
$this->mime $this->multipart."--".$boundary."--\r\n";
        }

/***************************************
** Sends the mail.
***************************************/
        
function send($to_name$to_addr$from_name$from_addr$subject ''$headers ''){

                if(
$to_name != ''$to '"'.$to_name.'" <'.$to_addr.'>';
                else 
$to $to_addr;

                if(
$from_name != ''$from '"'.$from_name.'" <'.$from_addr.'>';
                else 
$from $from_addr;

                
$this->headers.= 'From: '.$from."\r\n";
                
$this->headers.= $headers;

                
mail($to$subject$this->mime$this->headers);
        }

/***************************************
** Use this method to deliver using direct
** smtp connection. Relies upon Manuel Lemos'
** smtp mail delivery class available at:
** http://phpclasses.upperdesign.com
**
** void smtp_send( string *Name* of smtp object,
**                 string From address,
**                 array  To addresses,
**                 array  Headers,
**                 string The body)
***************************************/
        
function smtp_send($smtp_obj$from_addr$to_addr){
                global $
$smtp_obj;
                
$smtp_obj = $$smtp_obj;

                if(
substr($this->headers, -2) == "\r\n"$this->headers substr($this->headers,0,-2);
                
$this->headers explode("\r\n"$this->headers);

                
$smtp_obj->sendmessage($from_addr$to_addr$this->headers$this->mime);
        }

// End of class.