Click to See Complete Forum and Search --> : Question on Submitting Attachment via email


rstorey
03-28-2008, 03:21 PM
I have a form-to-email that has an email attachment submitted by user.

It Works. but ONLY IF the user submits an attachment. If the user does NOT chose to submit an attachment, the email is not sent and the page goes blank.

What should i do?

<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){

// we'll begin by assigning the To address and message subject
$to="test@test.com";

$subject="*** Form ***";

// get the sender's name and email address
// we'll just plug them a variable to be used later
$from = stripslashes($_POST['fromname'])."<".stripslashes($_POST['fromemail']).">";

// generate a random string to be used as the boundary marker
$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";

// store the file information to variables for easier access
$tmp_name = $_FILES['filename']['tmp_name'];
$type = $_FILES['filename']['type'];
$name = $_FILES['filename']['name'];
$size = $_FILES['filename']['size'];

// here we'll hard code a text message
// again, in reality, you'll $message = $_REQUEST['message'] ;

$company = $_REQUEST['company'] ;
$fromname = $_REQUEST['fromname'] ;
$email = $_REQUEST['fromemail'] ;
$airport = $_REQUEST['airport'] ;
$message = $_REQUEST['message'] ;
$message .= "Company = " . $_REQUEST['company'];
$message .= "Contact = " . $_REQUEST['fromname'];
$message .= "Email = " . $_REQUEST['fromemail'];
$modules = '';
foreach($_REQUEST['modules'] as $module){
$modules .= $module . ', ';
}
$message .= "Modules: " . $modules;


// PROBLEM BELOW HERE (I BELIEVE): I RECIEVE AN EMAIL WITH AN ATTACHMENT. BUT WHAT IF

// THE USER CHOSES *NOT* TO SUBMIT AN ATTACHMENT. THEN IT DOES NOT WORK. ADVICE?

// if the upload succeded, the file will exist
if (file_exists($tmp_name)){

// check to make sure that it is an uploaded file and not a system file
if(is_uploaded_file($tmp_name)){

// open the file for a binary read
$file = fopen($tmp_name,'rb');

// read the file content into a variable
$data = fread($file,filesize($tmp_name));

// close the file
fclose($file);

// now we encode it and split it into acceptable length lines
$data = chunk_split(base64_encode($data));
}

// now we'll build the message headers
$headers = "From: $from\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: multipart/mixed;\r\n" .
" boundary=\"{$mime_boundary}\"";

// next, we'll build the message body
// note that we insert two dashes in front of the
// MIME boundary when we use it
$message = "This is a multi-part message in MIME format. Hope this works. -G\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";

// now we'll insert a boundary to indicate we're starting the attachment
// we have to specify the content type, file name, and disposition as
// an attachment, then add the file content and set another boundary to
// indicate that the end of the file has been reached
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$type};\n" .
" name=\"{$name}\"\n" .
//"Content-Disposition: attachment;\n" .
//" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";

// now we just send the message
if (@mail($to, $subject, $message, $headers))
echo "Message Sent";
else
echo "Failed to send";
}
} else {
?>

Znupi
03-28-2008, 04:19 PM
1. Please use the and tags to post code.
2. Try using some specialized e-mail sender classes like Swift (swiftmailer.org) or PHPMailer (phpmailer.codeworxtech.com).