Home arrow PHP arrow Page 3 - A MIME Mailer Class

Adding an Attachment - PHP

Setting up a web application to send plain text email is easy. What if you need the email to handle other content, such as images or special document formats? This article explains how to design a PHP class for sending email with attachments.

  1. A MIME Mailer Class
  2. You've Got Mail
  3. Adding an Attachment
  4. Sending it on its way
By: Chris Root
Rating: starstarstarstarstar / 20
January 04, 2006

print this article



  function add_attachment($file_path)
   if($file_path != "")
    $this->files[] = $this->set_file_section($file_path);

          function set_file_section($file_path)
   if($str = file_get_contents($file_path))
    $str = file_get_contents($file_path);
    $bname = basename($file_path);
         $str = chunk_split(base64_encode($str));
    $section .= "--MIME_BOUNDRY\n";
    $section .= "Content-Type: ".$this->determine_mime($file_path)."; name=\"$bname\"\n";
    $section .= "Content-disposition: attachment\n";
    $section .= "Content-Transfer-Encoding: base64";
    $section .= "\n\n";
    $section .= "$str";
    $section .= "\n\n";
    return $section;
    $problem = "";
     $problem = "File could not be found";
    echo("<strong>unable to load specified file $file_path in set_file_section method</strong> <br>$problem");

The "add_attachment()" method is pretty simple. It accepts the string path to a file to attach as an argument. It calls the "set_file_section()" method which loads the file, encodes it and places it in the proper mime content. In order to insert the proper mime type for the file into the string, we need to send the file name to a function that determines the mime type based on the file extension. There are a lot of these functions available on various sites and more complex classes that use the mime types file that is used by Apache.

For this class I have written a basic mime type function that supports the formats I most commonly encounter in my work. If you have additional ones that you wish to support, adding mime types to this function is as simple as adding to the switch construct.

   function determine_mime($name)
    $str = basename($name);
   $name_arr = explode(".",$str);
   $len = count($name_arr) - 1;
   $name_arr[$len] = strtolower($name_arr[$len]);
    case "jpg":
     $type = "image/jpeg";
    case "jpeg":
     $type = "image/jpeg";
    case "gif":
     $type = "image/gif";
    case "txt":
     $type = "text/plain";
    case "pdf":
     $type = "application/pdf";
    case "csv";
     $type = "text/csv";
    case "html":
     $type = "text/html";
    case "htm":
     $type = "text/html";
    case "xml":
     $type = "text/xml";
   return $type;

>>> More PHP Articles          >>> More By Chris Root

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort


- 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: