×
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

Sending and Receiving Email

How do I send attachments? by Glowball
Posted: 24 Oct 01

Script copied from Professional PHP Programming, Wrox Publishers

Put this into a file called mime_mail.php:

<?
class mime_mail {
    var $parts;
    var $to;
    var $from;
    var $headers;
    var $subject;
    var $body;
    
    /*    
    *    void mime_mail()
    *    class constructor
    */
    
    function mime_mail() {
        $this->parts = array();
        $this->to = "";
        $this->from = "";
        $this->subject = "";
        $this->body = "";
        $this->headers = "";
        }
        
    /*     
    *    void add_attachment(string message, [string name], [string ctype])
    *    Add an attachment to the mail object
    */
    
    function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
        $this->parts[] = array (
            "ctype" => $ctype,
            "message" => $message,
            "encode" => $encode,
            "name" => $name
            );
        }
        
    /*
    *     void build_message(array part=
    *    Build message parts of a multipart mail
    */
    
    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";
        }
        
    /*
    *    void build_multipart()
    *    Build a multipart mail
    */
    
    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";
        }
        
    /*
    *    string get_mail()
    *    returns the constructed mail
    */
    
    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;
        }
        
    /*
    *    void send()
    *    Send the mail (last class-function to be called)
    */
    
    function send() {
        $mime = $this->get_mail(false);
        mail($this->to, $this->subject, "", $mime);
        }
        
    }; // end of class
?>

Then include it in your file that needs to send email with attachments:

include "mime_mail.php";

Then call it like this:

$filename = "myfile.jpg";
$content_type = "image/jpeg";
$fd = fopen($filename, "r");
$data = fread($fd, filesize($filename));
fclose($fd);

$mail = new mime_mail;
$mail->from     = "me@domain.com";
$mail->to     = "someone@somewhere.com";
$mail->subject     = "Email Subject";
$mail->body     = "The body of the email would go here and can span multiple lines.";

$mail->add_attachment($data, $filename, $content_type);
$mail->send();

It can be used to send simple mail without attachments too, it's very flexible.  Enjoy!

Back to PHP FAQ Index
Back to PHP Forum

My Archive

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close