TalkPHP

TalkPHP (http://www.talkphp.com/forums.php)
-   Absolute Beginners (http://www.talkphp.com/absolute-beginners/)
-   -   PHP Mail - Help sending multiple attachments (http://www.talkphp.com/absolute-beginners/1661-php-mail-help-sending-multiple-attachments.html)

xperience 12-07-2007 06:09 PM

PHP Mail - Help sending multiple attachments
 
I am attempting to send multiple attachments, which a user will attach using an input type file. I can get one e-mail to send with an attachment without a problem, but I get lost when I need to add a second attachment or even a third attachment.


Code:

<p>File Attachment: <input type='file' name='fileatt' /></p>
<p>File Attachment: <input type='file' name='fileatt2' /></p>


PHP Code:

$to      '';
$from    '';
$subject '';
 
// Obtain file upload vars
$fileatt      $_FILES['fileatt']['tmp_name'];
$fileatt_type $_FILES['fileatt']['type'];
$fileatt_name $_FILES['fileatt']['name'];
 
$fileatt2      $_FILES['fileatt2']['tmp_name'];
$fileatt2_type $_FILES['fileatt2']['type'];
$fileatt2_name $_FILES['fileatt2']['name'];
 
 
$headers "From: $from";
 
if (
is_uploaded_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/html; 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";
    }
}
 
if (
is_uploaded_file($fileatt2)) {
    
$file fopen($fileatt2,'rb');
    
$data fread($file,filesize($fileatt2));
    
fclose($file);
   
     
// Generate a boundary string
    
$semi_rand md5(time());
    
$mime_boundary "==Multipart_Boundary_x{$semi_rand}x";
   
     
$data chunk_split(base64_encode($data));
   
    
$message .= "--{$mime_boundary}\n" .
    
"Content-Type: {$fileatt2_type};\n" .
    
" name=\"{$fileatt2_name}\"\n" .
    
//"Content-Disposition: attachment;\n" .
    //" filename=\"{$fileatt_name}\"\n" .
    
"Content-Transfer-Encoding: base64\n\n" .
    
$message "\n\n" .
    
"--{$mime_boundary}--\n";
}
 
if (!
is_uploaded_file($fileatt)) {
     
$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/html; charset=\"iso-8859-1\"\n" .
             
"Content-Transfer-Encoding: 7bit\n\n" .
             
$message "\n\n";
}
// Send the message
$ok mail($to$subject$message$headers); 

I need to be able to send multiple attachments, but I have no idea what I am doing wrong unfortunately. If someone could give me a helping hand that'd be great.

sjaq 12-07-2007 07:50 PM

You can use arrays for that:
HTML Code:

<p>File Attachment: <input type='file' name='fileatt[]' /></p>
<p>File Attachment: <input type='file' name='fileatt[]' /></p>

And then use foreach to do something with each individual file:
PHP Code:

foreach($_FILES['fileatt'] as $file) {
    if(
is_uploaded_file($file['tmp_name'])) {
        
// do something with the file
    
}


And maybe you can use some javascript to let people add ad many files as they want.. (I'm too lazy to make that for you :-P)

Wildhoney 12-07-2007 08:58 PM

Well, I don't mind dong the Javascript part of it if you want that, but just a word of advice on the Javascript side of things. When you add new elements to the form and hide them, Safari actually classes that as a breach of security and doesn't include the item when you submit the form, so the best way to do it is to simply use the position CSS attribute to place an element over the top of the other one. Therefore the one below is still technically visible to the browser, just not to the user.

webxt 12-19-2009 12:33 PM

I'm sorry for oppening an very old thread but I have the same problem.

@sjaq method.

HTML Code:

<p>File Attachment: <input type='file' name='attachment[]' /></p>
<p>File Attachment: <input type='file' name='attachment[]' /></p>

PHP Code:

foreach($_FILES['attachment'] as $file) {

if (
is_uploaded_file($file['tmp_name'])) {

  
// Read the file to be attached ('rb' = read binary)
  
$file fopen($file['tmp_name'],'rb');
  
$data fread($file,filesize($file['tmp_name']));
  
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/html; 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: {$file['type']};\n" .
              
" name=\"{$file['name']}\"\n" .
              
//"Content-Disposition: attachment;\n" .
              //" filename=\"{$fileatt_name}\"\n" .
              
"Content-Transfer-Encoding: base64\n\n" .
              
$data "\n\n" .
              
"--{$mime_boundary}--\n";
    }


Any ideas that can help me? Thank you.

sarfraznawaz 09-06-2010 08:26 AM

Quote:

Originally Posted by xperience (Post 5794)
I am attempting to send multiple attachments, which a user will attach using an input type file. I can get one e-mail to send with an attachment without a problem, but I get lost when I need to add a second attachment or even a third attachment.


Code:

<p>File Attachment: <input type='file' name='fileatt' /></p>
<p>File Attachment: <input type='file' name='fileatt2' /></p>


PHP Code:

$to      '';
$from    '';
$subject '';
 
// Obtain file upload vars
$fileatt      $_FILES['fileatt']['tmp_name'];
$fileatt_type $_FILES['fileatt']['type'];
$fileatt_name $_FILES['fileatt']['name'];
 
$fileatt2      $_FILES['fileatt2']['tmp_name'];
$fileatt2_type $_FILES['fileatt2']['type'];
$fileatt2_name $_FILES['fileatt2']['name'];
 
 
$headers "From: $from";
 
if (
is_uploaded_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/html; 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";
    }
}
 
if (
is_uploaded_file($fileatt2)) {
    
$file fopen($fileatt2,'rb');
    
$data fread($file,filesize($fileatt2));
    
fclose($file);
   
     
// Generate a boundary string
    
$semi_rand md5(time());
    
$mime_boundary "==Multipart_Boundary_x{$semi_rand}x";
   
     
$data chunk_split(base64_encode($data));
   
    
$message .= "--{$mime_boundary}\n" .
    
"Content-Type: {$fileatt2_type};\n" .
    
" name=\"{$fileatt2_name}\"\n" .
    
//"Content-Disposition: attachment;\n" .
    //" filename=\"{$fileatt_name}\"\n" .
    
"Content-Transfer-Encoding: base64\n\n" .
    
$message "\n\n" .
    
"--{$mime_boundary}--\n";
}
 
if (!
is_uploaded_file($fileatt)) {
     
$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/html; charset=\"iso-8859-1\"\n" .
             
"Content-Transfer-Encoding: 7bit\n\n" .
             
$message "\n\n";
}
// Send the message
$ok mail($to$subject$message$headers); 

I need to be able to send multiple attachments, but I have no idea what I am doing wrong unfortunately. If someone could give me a helping hand that'd be great.

Can you plz send the file for which a user will attach using an input type file. I am searching for it and I cant get. It would be helpful if you help me in this. THanks.

MAIL ID: razsince1983@gmail.com

sarfraznawaz 09-06-2010 08:27 AM

Need a feedback form with attached file
 
Can you plz send the file for which a user will attach using an input type file. I am searching for it and I cant get. It would be helpful if you help me in this. THanks.

MAIL ID: razsince1983@gmail.com


All times are GMT. The time now is 05:21 AM.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0