How to attach file with feedback form in PHP ?
To attach a file with a feedback form in PHP, you can use the PHP mail()
function along with the multipart/form-data
encoding type in the HTML form. Here are the steps to do it:
- Create an HTML form with the
enctype
attribute set tomultipart/form-data
to allow file uploads. For example:
<form action="submit.php" method="post" enctype="multipart/form-data">
<label for="name">Name:</label>
<input type="text" id="name" name="name"><br><br>
<label for="email">Email:</label>
<input type="email" id="email" name="email"><br><br>
<label for="message">Message:</label>
<textarea id="message" name="message"></textarea><br><br>
<label for="attachment">Attachment:</label>
<input type="file" id="attachment" name="attachment"><br><br>
<input type="submit" value="Submit">
</form>
- In the PHP script that handles the form submission (
submit.php
in this example), use the$_FILES
superglobal to access the uploaded file. For example:
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$attachment = $_FILES['attachment'];
// Process the form data and send the email with attachment using the mail() function
- Use the
fopen()
function to open the uploaded file and read its contents. For example:
$attachment_name = $attachment['name'];
$attachment_tmp_name = $attachment['tmp_name'];
$attachment_type = $attachment['type'];
$attachment_size = $attachment['size'];
$attachment_content = file_get_contents($attachment_tmp_name);
$attachment_content = chunk_split(base64_encode($attachment_content));
- Use the
boundary
parameter to separate the different parts of the email message, including the attachment. For example:
$boundary = md5(time());
$headers = "From: $email\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$message_body = "--$boundary\r\n";
$message_body .= "Content-Type: text/plain; charset=\"UTF-8\"\r\n";
$message_body .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$message_body .= "$message\r\n\r\n";
$message_body .= "--$boundary\r\n";
$message_body .= "Content-Type: $attachment_type; name=\"$attachment_name\"\r\n";
$message_body .= "Content-Transfer-Encoding: base64\r\n";
$message_body .= "Content-Disposition: attachment; filename=\"$attachment_name\"\r\n\r\n";
$message_body .= "$attachment_content\r\n\r\n";
$message_body .= "--$boundary--";
mail('[email protected]', 'Feedback Form Submission', $message_body, $headers);
This will send an email with the form data and the attached file to the specified recipient. Note that you may need to adjust the email headers and message body to fit your specific requirements.