TalkPHP
 
 
Account Login
Latest Articles
» The basic usage of PHPTAL, a XML/XHTML template library for PHP
» Vulnerable methods and the areas they are commonly trusted in.
» Simple way to protect a form from bot
» The Basics On: How Session Stealing Works
» How to keep your forms from double posting data
IRC Channel
IRC Speech Bubble Join the friendly bunch on IRC...
(#TalkPHP on Freenode)

...Also available via a web interface.

See this thread for information on the TalkPHP Free Hugs Initiative™. Subject to availability.
Associates
Associates
CSS Tutorials
Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old 12-07-2007, 06:09 PM   #1 (permalink)
The Wanderer
 
Join Date: Dec 2007
Posts: 18
Thanks: 2
xperience is on a distinguished road
Default 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.
xperience is offline  
Reply With Quote
The Following User Says Thank You to xperience For This Useful Post:
webxt (12-19-2009)
Old 12-07-2007, 07:50 PM   #2 (permalink)
The Acquainted
 
sjaq's Avatar
 
Join Date: Nov 2007
Location: Netherlands
Posts: 113
Thanks: 11
sjaq is on a distinguished road
Default

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 )
sjaq is offline  
Reply With Quote
The Following User Says Thank You to sjaq For This Useful Post:
webxt (12-19-2009)
Old 12-07-2007, 08:58 PM   #3 (permalink)
La Vida es Sueño
Advanced Programmer Top Contributor 
 
Wildhoney's Avatar
 
Join Date: Sep 2007
Location: Oldham
Posts: 2,280
Thanks: 90
Wildhoney is on a distinguished road
Default

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.
__________________
The man who comes back through the Door in the Wall will never be quite the same as the man who went out.
Send a message via AIM to Wildhoney Send a message via MSN to Wildhoney Send a message via Yahoo to Wildhoney
Wildhoney is offline  
Reply With Quote
Old 12-19-2009, 12:33 PM   #4 (permalink)
The Visitor
 
Join Date: Dec 2009
Posts: 1
Thanks: 2
webxt is on a distinguished road
Default

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.
webxt is offline  
Reply With Quote
Old 09-06-2010, 08:26 AM   #5 (permalink)
The Visitor
 
Join Date: Sep 2010
Posts: 2
Thanks: 0
sarfraznawaz is on a distinguished road
Default

Quote:
Originally Posted by xperience View Post
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 is offline  
Reply With Quote
Old 09-06-2010, 08:27 AM   #6 (permalink)
The Visitor
 
Join Date: Sep 2010
Posts: 2
Thanks: 0
sarfraznawaz is on a distinguished road
Asterix 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
sarfraznawaz is offline  
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


All times are GMT. The time now is 06:26 AM.

 
     

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0
Inactive Reminders By Icora Web Design