Home arrow PHP arrow Page 2 - Migrating Class Code for a MIME Email to PHP 5

Sending MIME email with PHP 4 - PHP

Welcome to the final installment of the series, “Sending MIME email with PHP.” This series teaches you how to build a highly modular PHP class that can be used to send MIME-compliant email messages in plain text and HTML, while letting you work with file attachments as well. In this article, I'm going to migrate the source code from the previous article to PHP 5, taking full advantage of the new and improved features in the latest version of PHP.

TABLE OF CONTENTS:
  1. Migrating Class Code for a MIME Email to PHP 5
  2. Sending MIME email with PHP 4
  3. Porting the code of the previous MIME mailer class to PHP 5
  4. Putting the brand new mailer class to work
By: Alejandro Gervasio
Rating: starstarstarstarstar / 4
August 06, 2008

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

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)-
1]),$this->mimeTypes)){

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
\nContent-Transfer-Encoding: quoted-printable\n\n\n".$this->message."\n\n";

}

// 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
\nContent-Transfer-Encoding: 8bit\n\n\n".$html."\n\n";

}

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
($attachment)."; name="".basename($attachment).""\nContent-disposition:
attachment\nContent-Transfer-Encoding: base64\n\n".$fileStr."\n\n";

}

return $attachmentPart;

}

}

// send email

function send(){

$to=$this->recipient;

$subject=$this->subject;

$headers=$this->buildHeaders();

$message=$this->buildTextPart().$this->buildHTMLPart().$this-
>buildAttachmentPart()."--MIME_BOUNDRY--\n";

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.



 
 
>>> More PHP Articles          >>> More By Alejandro Gervasio
 

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort
   

PHP ARTICLES

- Hackers Compromise PHP Sites to Launch Attac...
- Red Hat, Zend Form OpenShift PaaS Alliance
- PHP IDE News
- BCD, Zend Extend PHP Partnership
- PHP FAQ Highlight
- PHP Creator Didn't Set Out to Create a Langu...
- PHP Trends Revealed in Zend Study
- PHP: Best Methods for Running Scheduled Jobs
- PHP Array Functions: array_change_key_case
- PHP array_combine Function
- PHP array_chunk Function
- PHP Closures as View Helpers: Lazy-Loading F...
- Using PHP Closures as View Helpers
- PHP File and Operating System Program Execut...
- PHP: Effects of Wrapping Code in Class Const...

Developer Shed Affiliates

 


Dev Shed Tutorial Topics: