This article shows you how to create a PHP based email form that
supports file attachment. The article will also show you how to validate
the type and size of the uploaded file.
The HTML form with file upload box
The code for an HTML form
with a file upload box is given below. User can click on the 'Browse'
button to select the file from his/her local machine.
The form will look like this:

Please note that we have added:
while
defining the <form> tag. This is to tell the browser that this
form will be used to upload files. Then we have added the "name" and
"email" fields to collect the user info. The third form field is the
file upload box.
On
hitting the "Submit" button, the form data along with the file data is
posted to the script pointed to by the 'action' attribute of the form.
Getting the uploaded file in the PHP script
In the PHP script, we will first validate the submission and if the validation succeeds, we will send the submission by email.
We can access the uploaded file and its different attributes by using the $_FILES
array. This array will contain the name, size, path and other
attributes of the uploaded file. The code below gets the name, type and
size of the uploaded file:
The code above is getting the different attributes of the uploaded file from the $_FILES[]
array.
Validating the size and extension of the uploaded file
Suppose
we don't want to allow files greater than the size of 100KB and we only
want to allow image files to be uploaded. The validation code goes like
this:
In
the above code we are validating the file size and type. We have the
maximum allowed file ($max_allowed_file_size) size set to 100KB. The
$allowed_extensions array cotains the file extensions of all allowed
file types.
The validation code checks to see whether the file extension matches any of the extensions in the $allowed_extensions array.
If there are errors found in the validation, the error is displayed. Else we proceed with sending the email.
Copy the uploaded file
Now, its time to send the uploaded file with the user message to the recipient's email address.
First of all we shall copy the file to a folder on the server.
This code copies the uploaded file to the 'uploads' folder. You can change the uploads folder by updating $upload_folder.
Please make sure that "uploads" folder has "777" permissions.
Sending the Email
The next step is to compose and send the email. We will use the Pear library for composing and sending the email. ( see the Pear installation instructions below ) The pear classes PEAR::Mail and PEAR::Mail_Mime are used for sending the email with the attachment.
First, we need to include the pear library files for these classes.
The code below composes and sends the email
Mail_mime()
class helps in composing a MIME message. In the code above, a Mail_mime object is created, the text body is updated ( $message->setTXTBody($text);
) and the attachment is added ( $message->addAttachment(file)
)
The MIME encoded message is then sent using the Mail class.
The sample PHP upload form
Click here to download php-email-form-attachment.zip
The download contains a complete PHP upload form that sends the uploaded by email.
How to Install the PEAR Library
In
this article we used the PEAR::Mail and PEAR::Mail_Mime classes to send
the email with attachment. Before using these classes, you need to
install the PEAR package on your server. It is beyond the scope of this
tutorial to discuss the installation of PEAR. But, I want to give you a
quick tip. Get the PEAR installer script from
http://pear.php.net/go-pear
Save
the file as "pear-installer.php". Upload this file to your server in
any directory. Then run this file from your browser, like this:
http://www.yourdomain.com/pear-installer.php
This
display the web interface to install the PEAR on your website. The
interface shows detailed instructions. After Pear is installed, search
and install packages "mail" and "mail_mime".