Before I start showing you how to migrate the source code of the MIME mailer class that I built in the previous article to PHP 5 , it’d be pretty useful to list its entire definition. This way you’ll be able to compare this PHP-4 based version of the class with the one that will be coded later on using PHP 5. Having said that, here’s how the pertinent “Mailer” class looks before making the aforementioned code migration: class Mailer{ var $sender; var $recipient; var $subject; var $headers=array(); var $mimeTypes=array(); var $html=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']='PHP 4/5'; $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'; } // add new MIME header function addHeader($name,$value){ $this->headers[$name]=$value; } // add HTML to message function addHTML($html){ if(!$html){ trigger_error('Invalid HTML.',E_USER_ERROR); } $this->html[]=$html; } // 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)- trigger_error('MIME Type not found.',E_USER_ERROR); } return $mimeType; } // 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"; } // create text part of the message function buildTextPart(){ return "--MIME_BOUNDRY\nContent-Type: text/plain; charset=iso-8859-1 } // create HTML part of the message function buildHTMLPart(){ if(count($this->html)>0){ $htmlPart=''; foreach($this->html as $html){ $htmlPart.="--MIME_BOUNDRY\nContent-Type: text/html; charset=iso-8859-1 } return $htmlPart; } } // 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 } return $attachmentPart; } } // send email function send(){ $to=$this->recipient; $subject=$this->subject; $headers=$this->buildHeaders(); $message=$this->buildTextPart().$this->buildHTMLPart().$this- if(!mail($to,$subject,$message,$headers)){ trigger_error('Error sending email.',E_USER_ERROR); } } } That’s was pretty illustrative, right? Having listed the full source code that corresponds to the MIME mailer class that was constructed in the last tutorial, I should assume that you’re very familiar with using it to send messages in plain text and HTML format, while working with file attachments also. So what’s the next step? Well, as I said in the introduction, it’d be pretty convenient to port the entire source code of the above mailer class to PHP 5. This would permit us to take advantage of its improved object model. Therefore, in the following section, I’m going to show you how to perform the aforementioned code migration. To learn the details of this process, please click on the link below and keep reading.
blog comments powered by Disqus |
|
|
|
|
|
|
|