Before I get my hands dirty and teach you how to provide the MIME mailer class with the ability to send email messages in HTML format, first I’d like to list its current signature, so you can recall how it looked originally. Here’s the full source code that corresponds to the “Mailer” class built during the previous tutorial: class Mailer{ var $sender; var $recipient; var $subject; var $headers=array(); var $mimeTypes=array(); var $attachments=array(); function Mailer($sender,$recipient,$subject,$message){ // validate incoming parameters if(!preg_match("/^.+@.+$/",$sender)){ trigger_error('Invalid value for email sender.'); } if(!preg_match("/^.+@.+$/",$recipient)){ trigger_error('Invalid value for email recipient.'); } if(!$subject||strlen($subject)>255){ trigger_error('Invalid length for email subject.'); } if(!$message){ trigger_error('Invalid value for email message.'); } $this->sender=$sender; $this->recipient=$recipient; $this->subject=$subject; $this->message=$message; // define some default MIME headers $this->headers['MIME-Version']='1.0'; $this->headers['Content-Type']='multipart/mixed;boundary="MIME_BOUNDRY"'; $this->headers['From']='<'.$this->sender.'>'; $this->headers['Return-Path']='<'.$this->sender.'>'; $this->headers['Reply-To']=$this->sender; $this->headers['X-Mailer']='PHP5'; $this->headers['X-Sender']=$this->sender; $this->headers['X-Priority']='3'; // define some default MIME types $this->mimeTypes['image/jpeg']='jpg'; $this->mimeTypes['image/jpg']='jpg'; $this->mimeTypes['image/gif']='gif'; $this->mimeTypes['text/plain']='txt'; $this->mimeTypes['text/html']='htm'; $this->mimeTypes['text/xml']='xml'; $this->mimeTypes['application/pdf']='pdf'; } // create text part of the message function buildTextPart(){ return "--MIME_BOUNDRY\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n\n".$this->message."\n\n"; } // create attachments part of the message function buildAttachmentPart(){ if(count($this->attachments)>0){ $attachmentPart=''; foreach($this->attachments as $attachment){ $fileStr=file_get_contents($attachment); $fileStr=chunk_split(base64_encode($fileStr)); $attachmentPart.="--MIME_BOUNDRY\nContent-Type: ".$this->getMimeType($attachment)."; name="".basename($attachment).""\nContent-disposition: attachment\nContent-Transfer-Encoding: base64\n\n".$fileStr."\n\n"; } return $attachmentPart; } } // create message MIME headers function buildHeaders(){ foreach($this->headers as $name=>$value){ $headers[]=$name.': '.$value; } return implode("\n",$headers)."\nThis is a multi-part message in MIME format.\n"; } // add new MIME header function addHeader($name,$value){ $this->headers[$name]=$value; } // add new attachment function addAttachment($attachment){ if(!file_exists($attachment)){ trigger_error('Invalid attachment.',E_USER_ERROR); } $this->attachments[]=$attachment; } // get MIME Type of attachment function getMimeType($attachment){ $attachment=explode('.',basename($attachment)); if(!$mimeType=array_search(strtolower($attachment[count($attachment)-1]),$this->mimeTypes)){ trigger_error('MIME Type not found.',E_USER_ERROR); } return $mimeType; } // send email function send(){ $to=$this->recipient; $subject=$this->subject; $headers=$this->buildHeaders(); $message=$this->buildTextPart().$this->buildAttachmentPart()."--MIME_BOUNDRY--\n"; if(!mail($to,$subject,$message,$headers)){ trigger_error('Error sendind email.',E_USER_ERROR); } } } Does the above class ring any bells? I bet it does! As you can see, the class offers decent functionality, since it’s capable of sending MIME-compliant email messages; it supports working with file attachments as well. To demonstrate how the above class does its business, I included a short script that puts it to work. Here it is: // create a new instance of the 'Mailer' class $mailer=&new Mailer('alejandro@mydomain.com,'mybuddy@yourdomain.com','Testing mailer class','Hello buddy. I am sending to you a couple of fun images.'); // add some attachments $mailer->addAttachment('file1.jpg'); $mailer->addAttachment('file.jpg'); // send MIME email $mailer->send(); As you can see, the class is used to send a simple message with a couple of attached files to a hypothetical recipient. That was pretty simple to grasp, right? At this point, you hopefully remember how to use the previous “Mailer” class. So, what’s the next step to take? As you may have noticed, this class is only capable of sending messages in plain text format, but as I explained in the beginning, the MIME extension allows you to send email in HTML very easily. Thus, in the upcoming section I’m going to teach you how to add a brand new method to the aforementioned “Mailer” class that provides it with the capacity to send HTML-formatted email messages. This topic will be discussed in detail in the next few lines, so go ahead and read them.
blog comments powered by Disqus |
|
|
|
|
|
|
|