You're probably going to need a mime class - Manuel Lemos makes a good one,
then send as a mime attachment.

http://freshmeat.net/projects/mimemessageclass/

Some sample code below that I use (and a mime class).

Example.php
<?
if (!isset($SEND_MIME_LOADED)) {
        require "mimeclass.php";
}

$mymessage = new Mail(); 
$mymessage->from = "$emailfrom"; 
$mymessage->to = "$emailto"; 
$mymessage->subject = "$emailfromname sent a picture to you from
shanghaiguide.com"; 
$mymessage->headers["Reply-To"] = "$emailfrom"; 
$mymessage->headers["X-Extra-Header"] = "Pointless Header v3.0"; 
$mymessage->body = "$emailfromname sent you a picture from the
ShanghaiGuide.com site\n" . 
                        "----------------------------\n".
                        "http://www.Shanghaiguide.com\n\n";.
                        "The Shanghai Guide - The real guide to Shanghai
Life\n\nLive Chat, Thousands of Pictures, Classifieds, Message Forum and
more...";
$mymessage->attachments[0] = $DOCUMENT_ROOT.$pic; 
$mymessage->Send();

?>



mimeclass.php
<?php

//Abort on re-entry...
if ($SEND_MIME_LOADED==1){
        exit;
}

$SEND_MIME_LOADED=1;


////////////////////////////////////////////////////////////////
//Main Code
////////////////////////////////////////////////////////////////
/*
Uses sendmail to send the mail, mimencode to do the MIME  
encoding, and zip to automatically zip attachments. 

Contacting the author(s): 
Brought to you by the team at Sequoia Softworks, http://www.sequoiasoft.com 
Feel free to contact [EMAIL PROTECTED] and tell us how you like it! 
(Or to complain bitterly, report bugs, or suggest new features.) 

Known shortcomings/bugs: 
o guessMIMEType()only knows about a few MIME types. You can expand this as  
  you need. 
o $mime_boundary in the Send() method should be randomly generated, but it  
  isn't likely to ever hurt anything in its current form 

Example: 
 require("Mail.phtml"); 
 $mymessage = new Mail(); 
 $mymessage->from = "[EMAIL PROTECTED]"; 
 $mymessage->to = "[EMAIL PROTECTED]"; 
 $mymessage->subject = "This is your lucky day"; 
 $mymessage->headers["Reply-To"] = "[EMAIL PROTECTED]"; 
 $mymessage->headers["X-Extra-Header"] = "Pointless Header v3.0"; 
 $mymessage->body = "Doesn't it feel good to get mail?\nEspecially with
files  
 attached!\n"; 
 $mymessage->attachments[0] = "tarball.tar.gz"; 
 $mymessage->attachments[1] = "images/smiling_countenance.gif"; 
 $mymessage->attachments[2] = "/usr/share/reference/jargondict.html"; 
 $mymessage->attachments[3] = "./core"; 
 $mymessage->attachments[4] = "/etc/passwd";  //naughty naughty!! 
 $mymessage->ZipAttachments("your_files.zip"); //uncomment this to zip all  
                                               //the attachments into one
big  
                                               //attachment. 
 $mymessage->Send(); 
*/ 
class Mail { 
    var $from; //The sender 
    var $to; //The recipient 
    var $subject; //The subject line 
    var $headers; //A hash of additional headers (headername => headervalue)

    var $zipname; //The name of the file the attachments are zipped into 
                  //($zipname == false if attachments are to be sent  
                      //individually) 
    var $attachments; //An array of files to attach 
    var $body; //The body text of the message 
     
    //Mail constructor: initializes vars to default values. 'Nuff said. 
    function Mail() { 
        $this->from = ""; 
        $this->to = ""; 
        $this->subject = ""; 
        $this->headers = array(); 
        $this->zipname = false; 
        $this->attachments = array(); 
        $this->body = ""; 
    } 
     
    //Auxiliary method, used to guess a file's MIME type 
    //based on its extension. Doesn't know about too many 
    //extensions right now 
    function guessMIMEType($filename) { 
        //GUESS MIME TYPE 
        $filename = basename($filename); 
        if(strrchr($filename,".") == false) { 
            return("application/octet-stream"); 
        } 
         
        $ext = strrchr($filename,"."); 
        switch($ext) { 
            case ".gif": 
                return "image/gif"; 
                break; 
            case ".gz": 
                return "application/x-gzip"; 
            case ".htm": 
            case ".html": 
                return "text/html"; 
                break; 
            case ".jpg": 
                return "image/jpeg"; 
                break; 
            case ".tar": 
                return "application/x-tar"; 
                break; 
            case ".txt": 
                return "text/plain"; 
                break; 
            case ".zip": 
                return "application/zip"; 
                break; 
            default: 
                return "application/octet-stream"; 
                break; 
        } 
    } 

    //Cute little convenience method. Supply it with a filename to  
    //zip attachments to, or supply it with false if attachments are 
    //sent individually 
    function ZipAttachments($name) { 
        $this->zipname = $name; 
    } 

    //The workhorse method, does the actually sending of the mail. 
    //Doesn't check for errors so be careful! 
    function Send($sendmail = "/usr/lib/sendmail") { 

                if($this->from == "") { 
            $fp = popen($sendmail . " -i " . $this->to, "w"); 
                }
        else { 
            $fp = popen($sendmail . " -i -f\"" . $this->from . "\"  " .
$this->to, "w"); 
                }

        $mime_boundary = "-1747901728-1448367683-913849620=:4553"; 
         
        if($fp == false) 
            return false; 
         
        //Write subject header     
        fwrite($fp,"Subject: " . $this->subject . "\n"); 
     
        //Write user-defined headers     
        reset($this->headers); 
        while(list($hdrname,$hdrval) = each($this->headers)) { 
            fwrite($fp,$hdrname . ": " . $hdrval . "\n"); 
        } 
         
        //If there are attachments, this needs to be a MIME message 
        if(count($this->attachments) > 0) { 
            //Write MIME headers 
            fwrite($fp,"MIME-Version: 1.0\n"); 
            fwrite($fp,"Content-Type: multipart/mixed; BOUNDARY=\""  
. $mime_boundary . "\"\n"); 
            fwrite($fp,"\n"); 
            //Write dummy message body 
            fwrite($fp,"  This message is in MIME format.  The  
first part should be readable text,\n"); 
            fwrite($fp,"  while the remaining parts are likely  
unreadable without MIME-aware tools.\n"); 
            fwrite($fp,"  Send mail to  
[EMAIL PROTECTED] for more info.\n"); 
            fwrite($fp,"\n"); 
             
            //Write message text 
            fwrite($fp,"--" . "$mime_boundary" . "\n"); 
            fwrite($fp,"Content-Type: text/plain; charset=US- 
ASCII\n"); 
            fwrite($fp,"\n"); 
            fwrite($fp,$this->body); 
            fwrite($fp,"\n"); 
             
            //Handle attachments 
            if($this->zipname != false) { //IF we've been told to  
                                                      //zip the attachments 
                fwrite($fp,"--" . $mime_boundary . "\n"); 
                fwrite($fp,"Content-Type: application/zip; name= 
\"". $this->zipname . "\"\n"); 
                fwrite($fp,"Content-Transfer-Encoding: base64 
\n"); 
                  //fwrite($fp,"Content-ID: " . $content_ID . "\n"); 
                fwrite($fp,"Content-Description:\n"); 
                fwrite($fp,"\n"); 
                $cmdline = "zip - "; 
        while(list($key, $attachment_name) =  each($this->attachments)) 
                    $cmdline .= "$attachment_name "; 
                $cmdline .= "| mimencode -b"; 
                $pp = popen($cmdline,"r"); 
                while(!feof($pp)) { 
                    $data = fread($pp,4096); 
                    fwrite($fp,$data); 
                } 
                pclose($pp); 
            } 
            else { //no need to zip the attachments, attach them  
                               //separately 
        while(list($key, $attachment_name) = each($this->attachments)) { 
                fwrite($fp,"--" . $mime_boundary . "\n"); 
      fwrite($fp,"Content-Type: " . $this->guessMIMEType($attachment_name) .
";  
      name=\"". basename($attachment_name) . "\"\n"); 
            fwrite($fp,"Content-Transfer-Encoding: base64\n"); 
                    //fwrite($fp,"Content-ID: " .  
                                        //$content_ID . "\n"); 
                    fwrite($fp,"Content-Description:\n"); 
                    fwrite($fp,"\n"); 
                     $pp = popen("mimencode -b $attachment_name","r"); 
                    while(!feof($pp)) { 
                        $data = fread($pp,4096); 
                        fwrite($fp,$data); 
                    } 
                    pclose($pp); 
                } 
            } 
             
            fwrite($fp,"--" . $mime_boundary . "--\n"); 
        } 
        //No need for a MIME message, so it's an RFC822 message 
        else { 
            fwrite($fp,"\n"); 
            fwrite($fp,$this->body); 
        } 
         
         
        pclose($fp); 
    } 
} 
?>




-----Original Message-----
From: Mark Lo [mailto:[EMAIL PROTECTED]]
Sent: August 29, 2001 12:25 PM
To: [EMAIL PROTECTED]
Subject: [PHP] mailto function to attach a photo


Hi,

      I would like to know how to use the mailto function to attach a
specific file.

Thank you

Mark


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to