send attachment without upload using mail()

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • perhapscwk
    New Member
    • Sep 2007
    • 123

    send attachment without upload using mail()

    Below code works however it seems it will upload and save the attachment to
    server, how can send attachment without save the file into my server?
    and how to limit the file size to 3mb?

    Code:
    $email = $_POST['email']; 
    $from = $_POST['from']; 
    $subject = $_POST['subject']; 
    $message = $_POST['message']; 
    
    // Obtain file upload vars 
    $fileatt = $_FILES['fileatt']['tmp_name']; 
    $fileatt_type = $_FILES['fileatt']['type']; 
    $fileatt_name = $_FILES['fileatt']['name']; 
    
    $headers = "From: $from"; 
    
    if (file($fileatt)) { 
    // Read the file to be attached ('rb' = read binary) 
    $file = fopen($fileatt,'rb'); 
    $data = fread($file,filesize($fileatt)); 
    fclose($file); 
    
    // Generate a boundary string 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
    
    // Add the headers for a file attachment 
    $headers .= "\nMIME-Version: 1.0\n" . 
    "Content-Type: multipart/mixed;\n" . 
    " boundary=\"{$mime_boundary}\""; 
    
    // Add a multipart boundary above the plain message 
    $message = "This is a multi-part message in MIME format.\n\n" . 
    "--{$mime_boundary}\n" . 
    "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
    "Content-Transfer-Encoding: 7bit\n\n" . 
    $message . "\n\n"; 
    
    // Base64 encode the file data 
    $data = chunk_split(base64_encode($data)); 
    
    // Add file attachment to the message 
    $message .= "--{$mime_boundary}\n" . 
    "Content-Type: {$fileatt_type};\n" . 
    " name=\"{$fileatt_name}\"\n" . 
    //"Content-Disposition: attachment;\n" . 
    //" filename=\"{$fileatt_name}\"\n" . 
    "Content-Transfer-Encoding: base64\n\n" . 
    $data . "\n\n" . 
    "--{$mime_boundary}--\n"; 
    } 
    
    mail ("$email", "$subject", "$message", "$headers"); 
    echo("A confirmation email has been sent to: $email");
  • Atli
    Recognized Expert Expert
    • Nov 2006
    • 5062

    #2
    Hey.

    I see nothing in that code that would permanently save the file on the server. It will be uploaded temporarily to your server, at the location $_FILES['fileatt']['tmp_name'] specifies, and once the script is done executing, it will be disregarded.

    and how to limit the file size to 3mb?
    You check the size of the temporary file and exit if it is larger than your ceiling.

    P.S.
    You don't have to quote variables if you are using them by themselves. It's pointless.
    [code=php]
    // This:
    mail ("$email", "$subject", "$message", "$headers")
    // Should be:
    mail ($email, $subject, $message, $headers)
    [/code]

    Comment

    Working...