[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cobalt-users] raq4 - mime base64 problem with attachments



I am using a php mime class to send an email with a jpeg and pdf attachment
from a webpage.

If I send a txt file there is no problem.

If I send a jpeg or pdf file , the file becomes corrupted and cant be
opened.

I have used the correct mime types application/pdf and images/jpeg and they
exist in /etc/httpd/conf/mime.types.

I have also checked the files on the webpage and they open fine.

(I have also tested pine and it sends attachments without problem.)

I have put the php class file below.

Any help or suggestions would be appreciated.


Rgds

Bassi


<?
class mime_mail
{
   var $parts;
   var $to;
   var $from;
   var $headers;
   var $subject;
   var $body;

  function mime_mail() {
      $this->parts = array();
      $this->to =  "";
      $this->from =  "";
      $this->subject =  "";
      $this->body =  "";
      $this->headers =  "";
   }


   function add_attachment($message, $name =  "", $ctype =
"application/octet-stream") {
      $this->parts[] = array (
            "ctype" => $ctype,
            "message" => $message,
            "encode" => $encode,
            "name" => $name
                           );
   }


   function build_message($part) {
      $message = $part[ "message"];
      $message = chunk_split(base64_encode($message));
      $encoding =  "base64";
      return  "Content-Type: ".$part[ "ctype"].
         ($part[ "name"]? "; name = \"".$part[ "name"].
         "\"" :  "").

         "\nContent-Transfer-Encoding: $encoding\n\n$message\n";
   }

   function build_multipart() {
      $boundary =  "b".md5(uniqid(time()));
      $multipart =
       "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a
MIME encoded message.\n\n--$boundary";

         for($i = sizeof($this->parts)-1; $i >= 0; $i--)
      {
         $multipart .=  "\n".$this->build_message($this->parts[$i]).
            "--$boundary";
      }
      return $multipart.=  "--\n";
   }

   function get_mail($complete = true) {
      $mime =  "";
      if (!empty($this->from))
         $mime .=  "From: ".$this->from. "\n";
      if (!empty($this->headers))
         $mime .= $this->headers. "\n";

      if ($complete) {
         if (!empty($this->to)) {
            $mime .= "To: $this->to\n";
         }
         if (!empty($this->subject)) {
            $mime .= "Subject: $this->subject\n";
         }
      }

      if (!empty($this->body))
         $this->add_attachment($this->body,  "",  "text/plain");
      $mime .=  "MIME-Version: 1.0\n".$this->build_multipart();

      return $mime;
   }


   function send() {
      $mime = $this->get_mail(false);
      mail($this->to, $this->subject,  "", $mime);
   }
};  // end of class

?>.