Version: 2.1
Type: Class
Category: Other
License: GNU General Public License
Description: This class allow sending of text, html, or html/text messages with or without attachments.
<?php /* Amended 17/08/2003 to attach data from php as a file Use the 1st argument of '$email->attach()' for the data and the 2nd argument for the filename code is backwards compatible with older versions. Amended 20/02/2002 to include embeded images in html. email_html_wa & email_multi_wa are now capable of using embeded images. Include file holds 6 classes each extensions of email_txt email_txt - Text email no attachments. email_wa - Text email with attachments. email_html - Html email no attachments. email_html_wa - Html email with attachments. email_multi - Multi part email html and text. email_multi_wa - Multi part email html and text with attachments. All have the same prototype ( from, - Sender of email subject, - Subject of email return address, - Address for failed emails to return to. reply address, - Address for any replies to go to. ) All classes have these functions sendmail(recipient) - Sends the email to the supplied email address - the email address is checked for domain existance. setheaders() - Creates the headers ready for transmission. clean() - Removes any message and headers already set. - Useful for sending different emails. addmessage(message) - Add the message to the email. classes email_multi and email_multi_wa use this version of addmessage instead of the above. addmessage(text, html) - text is the text part of the email and html holds - the html alternative. Classes email_wa, email_html_wa and email_multi_wa also have attach(filename) - This will add an attachment to the email. - filename is the full pathname to the file. embed_image(filename, imageid) - Embeds an image in the email usefull for sending html emails with images that can be viewed offline. examples of use: text email $email=new email_txt("[email protected]", "Test Email"); $email->clean(); $email->setheaders(); $email->addmessage("Hello"); $email->sendmail("[email protected]"); text email with attachment $email=new email_wa("[email protected]", "Test Email"); $email->clean(); $email->setheaders(); $email->addmessage("Hello"); $email->attach("/path/to/file/filename"); $email->sendmail("[email protected]"); HTML email $email=new email_html("[email protected]", "Test Email"); $email->clean(); $email->setheaders(); $email->addmessage("<B>Hello<B>"); $email->sendmail("[email protected]"); HTML email with attachment $email=new email_html("[email protected]", "Test Email"); $email->clean(); $email->setheaders(); $email->addmessage("<B>Hello<B>"); $email->attach("/path/to/file/filename"); $email->sendmail("[email protected]"); Multipart email $email=new email_multi("[email protected]", "Test Email"); $email->clean(); $email->setheaders(); $email->addmessage("hello", "<B>Hello<B>"); $email->sendmail("[email protected]"); Multipart email with attachment $email=new email_multi_wa("[email protected]", "Test Email"); $email->clean(); $email->setheaders(); $email->addmessage("hello", "<B>Hello<B>"); $email->attach("/path/to/file/filename"); $email->sendmail("[email protected]"); HTML email with embeded image $email=new email_html_wa("[email protected]", "Test Email"); $email->clean(); $email->setheaders(); $email->addmessage("<IMG src="cid:pic1.1a""); $email->embed_image("/path/to/file/filename", "pic1.1a"); $email->sendmail("[email protected]"); Multipart email with embeded image $email=new email_multi_wa("[email protected]", "Test Email"); $email->clean(); $email->setheaders(); $email->addmessage("<IMG src="cid:pic1.1a""); $email->embed_image("/path/to/file/filename", "pic1.1a"); $email->sendmail("[email protected]"); */ class email_txt { var $subject; // email subject var $bound; // email boundary var $from; // from address var $headers; // message headers var $message; // email message var $retadd; // return address var $replyto; // reply address function email_txt($from="nobody@localhost", $subj="Email for you", $retadd="nobody@localhost", $replyto="nobody@localhost") { $bound="----=_NextPart_000_" . uniqid(rand()); $this->message=""; $this->bound=$bound; $this->subject=$subj; $this->retadd=$retadd; $this->replyto=$replyto; $this->from=$from; } function sendmail($rcpt) { list($name, $domain)=explode("@", $rcpt); $retval=checkdnsrr($domain, ANY); if ( (!$retval) || (empty($name)) || (empty($domain)) ) { echo "Invalid email address ".$rcpt.".<BR>"; return(0); } $retval=mail($rcpt, $this->subject, "", $this->headers.$this->message); return($retval); } function setheaders() { unset($headers); $headers="Errors: <".$this->retadd.">n"; $headers.="From: <".$this->from.">n"; $headers.="MIME-Version: 1.0n"; $headers.="Return-Path: <".$this->retadd.">n"; $headers.="Reply-To: <".$this->replyto.">n"; $headers.="Content-Transfer-Encoding: 7bitn"; $headers.="Content-Type:text/plain; charset=us-asciinn"; unset($this->headers); $this->headers=$headers; } function clean() { $this->message=""; $this->headers=""; } function addmessage($messin) { if ( !empty($messin) ) { $this->message.=$messin."n"; } } } class email_html extends email_txt { function email_html($from="nobody@localhost", $subj="Email for you", $retadd="nobody@localhost", $replyto="nobody@localhost") { $bound="----=_NextPart_000_" . uniqid(rand()); $this->message=""; $this->bound=$bound; $this->subject=$subj; $this->retadd=$retadd; $this->replyto=$replyto; $this->from=$from; } function setheaders() { unset($headers); $headers.="Errors: <".$this->retadd.">n"; $headers.="From: <".$this->from.">n"; $headers.="X-Mailer: PHPn"; $headers.="X-Sender: <".$this->from.">n"; $headers.="X-Priority: 1n"; $headers.="Return-Path: <".$this->retadd.">n"; $headers.="Reply-To: <".$this->replyto.">n"; $headers.="Content-Type:text/html; charset=iso-8859-1nn"; $this->message=$headers; } } class email_wa extends email_txt { function email_wa($from="nobody@localhost", $subj="Email for you", $retadd="nobody@localhost", $replyto="nobody@localhost") { $bound="----=_NextPart_000_" . uniqid(rand()); $this->message=""; $this->bound=$bound; $this->subject=$subj; $this->retadd=$retadd; $this->replyto=$replyto; $this->from=$from; } function sendmail($rcpt) { list($name, $domain)=explode("@", $rcpt); $retval=checkdnsrr($domain, ANY); if ( (!$retval) || (empty($name)) || (empty($domain)) ) { echo "Invalid email address ".$rcpt.".<BR>"; return(0); } $this->message.="nn--".$this->bound."--n"; $retval=mail($rcpt, $this->subject, "", $this->message); return($retval); } function setheaders() { unset($headers); $headers.="Errors: <".$this->retadd.">n"; $headers.="From: <".$this->from.">n"; $headers.="MIME-Version: 1.0n"; $headers.="Return-Path: <".$this->retadd.">n"; $headers.="Reply-To: <".$this->replyto.">n"; $headers.="Content-Type: multipart/mixed;boundary="".$this->bound.""n"; $headers.="Content-Transfer-Encoding: 7bitn"; $headers.="nn--".$this->bound."n"; $headers.="Content-Type:text/plain; charset=us-asciinn"; $this->message=$headers; } function attach($attch, $filename) { if ($filename) { $thisfile = $filename; } else { $bits=explode("/", $attch); $thisfile=$bits[(count($bits)-1)]; } unset($line); $line.="nn--".$this->bound."n"; $line.="Content-Type: application/octet-stream; name="$thisfile"n"; $line.="Content-Transfer-Encoding: base64nnn"; if ($filename) { $line.= chunk_split(base64_encode($attch)); } else { $filename=$attch; $linein=`uuencode -m $filename fred`; $lines=explode("n", $linein); for ( $loop=1; $loop<count($lines); $loop++ ) { $line.=$lines[$loop]."nr"; } } $line.="nn"; $this->message.=$line; } } class email_html_wa extends email_wa { function email_html_wa($from="nobody@localhost", $subj="Email for you", $retadd="nobody@localhost", $replyto="nobody@localhost") { $bound="----=_NextPart_000_" . uniqid(rand()); $this->message=""; $this->bound=$bound; $this->subject=$subj; $this->retadd=$retadd; $this->replyto=$replyto; $this->from=$from; } function setheaders() { unset($headers); $headers.="Errors: <".$this->retadd.">n"; $headers.="From: <".$this->from.">n"; $headers.="MIME-Version: 1.0n"; $headers.="Return-Path: <".$this->retadd.">n"; $headers.="Reply-To: <".$this->replyto.">n"; $headers.="Content-Type: multipart/mixed;boundary="".$this->bound.""n"; $headers.="Content-Transfer-Encoding: 7bitn"; $headers.="nn--".$this->bound."n"; $headers.="Content-Type:text/html; charset=iso-8859-1nn"; $this->message=$headers; } function addmessage($messin) { if ( !empty($messin) ) { $this->message.=$messin."n"; } } function embed_image($img_path, $img_name) { unset($line); unset($bits); $bits=explode("/", $img_path); $filename=$bits[(count($bits)-1)]; unset($bits); $bits=explode(".", $img_path); $line.="nn--".$this->bound."n"; $line.="Content-Type: image/".$bits[1]."n"; $line.="Content-ID: ".$img_name."n"; $line.="Content-Disposition: inline; filename="".$filename.""n"; $line.="Content-Transfer-Encoding: base64nnn"; $linein=`uuencode -m $img_path fred`; $lines=explode("n", $linein); for ( $loop=1; $loop<count($lines); $loop++ ) { $line.=$lines[$loop]."nr"; } $line.="nn"; $this->message.=$line; } } class email_multi extends email_txt { function email_multi($from="nobody@localhost", $subj="Email for you", $retadd="nobody@localhost", $replyto="nobody@localhost") { $bound="----=_NextPart_000_" . uniqid(rand()); $this->bound=$bound; $this->subject=$subj; $this->retadd=$retadd; $this->replyto=$replyto; $this->from=$from; } function addmessage($text, $html) { unset($message); // text $message .= "--$this->boundn"; $message .= "Content-Type: text/plain; ntcharset="iso-8859-1"rn"; $message .= "Content-Transfer-Encoding: 7bitrnrn"; $message .= $text . "n"; // html $message .= "--$this->boundrn"; $message .= "Content-Type: text/html; ntcharset="iso-8859-1"rn"; $message .= "Content-Transfer-Encoding: 7bitrnrn"; $message .= $html; $message .= "rn--$this->bound--"; $this->message=$message; } function setheaders() { unset($headers); $headers="From: $from <$this->from>rn"; $headers.="X-Sender: <$this->from>rn"; $headers.="X-Mailer: TLGExtranetrn"; $headers.="Return-Path: <$this->from>rn"; $headers.="Mime-Version: 1.0n"; $headers.="Content-Type: multipart/alternative; boundary="$this->bound"rn"; $headers.="X-Priority: 1rn"; $this->headers=$headers; } } class email_multi_wa extends email_txt { function email_multi($from="nobody@localhost", $subj="Email for you", $retadd="nobody@localhost", $replyto="nobody@localhost") { $bound="----=_NextPart_000_" . uniqid(rand()); $this->bound=$bound; $this->subject=$subj; $this->retadd=$retadd; $this->replyto=$replyto; $this->from=$from; } function addmessage($text, $html) { unset($message); // text $message .= "--$this->boundn"; $message .= "Content-Type: text/plain; ntcharset="iso-8859-1"rn"; $message .= "Content-Transfer-Encoding: 7bitrnrn"; $message .= $text . "n"; // html $message .= "--$this->boundrn"; $message .= "Content-Type: text/html; ntcharset="iso-8859-1"rn"; $message .= "Content-Transfer-Encoding: 7bitrnrn"; $message .= $html; $this->message=$message; } function setheaders() { unset($headers); $headers="From: $from <$this->from>rn"; $headers.="X-Sender: <$this->from>rn"; $headers.="X-Mailer: TLGExtranetrn"; $headers.="Return-Path: <$this->from>rn"; $headers.="Mime-Version: 1.0n"; $headers.="Content-Type: multipart/alternative; boundary="$this->bound"rn"; $headers.="X-Priority: 1rn"; $this->headers=$headers; } function sendmail($rcpt) { list($name, $domain)=explode("@", $rcpt); $retval=checkdnsrr($domain, ANY); if ( (!$retval) || (empty($name)) || (empty($domain)) ) { echo "Invalid email address ".$rcpt.".<BR>"; return(0); } $this->message.="rn--$this->bound--"; $retval=mail($rcpt, $this->subject, "", $this->headers.$this->message); return($retval); } function attach($attch) { $bits=explode("/", $attch); $thisfile=$bits[(count($bits)-1)]; unset($line); $line.="nn--".$this->bound."rn"; $line.="Content-Type: application/octet-stream; name="$thisfile"rn"; $line.="Content-Transfer-Encoding: base64rnrn"; $filename=$attch; $linein=`uuencode -m $filename fred`; $lines=explode("n", $linein); for ( $loop=1; $loop<count($lines); $loop++ ) { $line.=$lines[$loop]."nr"; } $line.="nn"; $this->message.=$line; } function embed_image($img_path, $img_name) { unset($line); unset($bits); $bits=explode("/", $img_path); $filename=$bits[(count($bits)-1)]; unset($bits); $bits=explode(".", $img_path); $line.="nn--".$this->bound."n"; $line.="Content-Type: image/".$bits[1]."n"; $line.="Content-ID: ".$img_name."n"; $line.="Content-Disposition: inline; filename="".$filename.""n"; $line.="Content-Transfer-Encoding: base64nnn"; $linein=`uuencode -m $img_path fred`; $lines=explode("n", $linein); for ( $loop=1; $loop<count($lines); $loop++ ) { $line.=$lines[$loop]."nr"; } $line.="nn"; $this->message.=$line; } } ?>