Forum Moderators: coopster
I can get one attachment to send but not the others. The attachment fields on the form are named "fileatt", "fileatt2", and "fileatt3. I've included the PHP portion of the script below.
Any ideas would be helpful. Thanks.
----------------------------------------------------------
<?php
// Read POST request params into global vars
$to = $_POST['to'];
$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'];
$fileatt2 = $_FILES['fileatt2']['tmp_name'];
$fileatt2_type = $_FILES['fileatt2']['type'];
$fileatt2_name = $_FILES['fileatt2']['name'];
$fileatt3 = $_FILES['fileatt3']['tmp_name'];
$fileatt3_type = $_FILES['fileatt3']['type'];
$fileatt3_name = $_FILES['fileatt3']['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);
$file2 = fopen($fileatt2,'rb');
$data2 = fread($file,filesize($fileatt2));
fclose($file2);
$file3 = fopen($fileatt3,'rb');
$data3 = fread($file,filesize($fileatt3));
fclose($file3);
// 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" .
$message . "\n\n" .
//"--{$mime_boundary}--\n";
$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";
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt3_type};\n" .
" name=\"{$fileatt3_name}\"\n" .
//"Content-Disposition: attachment;\n" .
//" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . $data2 . $data3 . "\n\n" .
"--{$mime_boundary}--\n";
}
// Send the message
$ok = @mail($to, $subject, $message, $headers);
if ($ok) {
echo "<p>Mail sent! Yay PHP!</p>";
} else {
echo "<p>Mail could not be sent. Sorry!</p>";
}
?>
I have looked at this code a couple of times now and I just can't see what might be giving you the problem. Any other hints or error messages? Anyone else have some great insight?
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);
} if (is_uploaded_file($fileatt2)) {
$file2 = fopen($fileatt2,'rb');
$data2 = fread($file2,filesize($fileatt2));
fclose($file2);
}
if (is_uploaded_file($fileatt2)) {
$file3 = fopen($fileatt3,'rb');
$data3 = fread($file3,filesize($fileatt3));
fclose($file3);
}
You might want to try this slightly changed code. It checks whether files two and three were actually uploaded while you only checked the first one. To get $data2 and $data3 it reads from $file2 and $file3 respectively instead of $file as your code did.
You will need to base64_encode $data2 and $data3 as well.
Each attached file needs to reside in its own multipart part. How is the MUA supposed to tell the boundaries of the attachments if you stick them together as one single attachment ($data . $data2 . $data3 . "\n\n")?
Have a look at Sending MIME e-mail from PHP [zend.com] to learn more.
Hope this helps.
Andreas