Jump to content


This topic is now archived and is closed to further replies.


can I send a document to an email account using php?

Recommended Posts

I have created a form which includes an opportunity for users to upload a document. Is it possible for me to send the form results including the document to a preset email address??

Any help on this would be great!

Share this post

Link to post
Share on other sites
here is a code snip i wrote for a tek-tips user a couple of days ago. note that it contains a very crude file type limiter in the $permittedFileTypes variable.  just add to that array if you want or remove the check later on in the code.

function displayForm(){
<style type="text/css">
body, input {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
input {margin-top: 3px;}
label {font-weight:bold;}
.message {width:25%; border:dotted red 1px; background-color:#FFE1E1; padding: 5px; margin-left:2px; }
.mainForm {width:25%;}
<? if (!empty($GLOBALS['message'])): ?>
<div class="message">
<? endif; ?>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>" enctype="multipart/form-data">
<fieldset class="mainForm" >
<legend>Upload file test script</legend>
<label>Type your name</label><br/>
<input type="text" name="posterName" /><br/>
<label>Select file for upload (max 3MB)</label><br/>
<input type="hidden" name="MAX_FILE_SIZE" value="3145728"/>
<input type="file" name="uploadedFile" /><br/>
<input type="submit" name="submit" value="Upload" style="float:right; margin-right: 10px;" />

//test to see whether the form was submitted
if (isset($_POST['submit'])):
    //set up some useful variables
    //mail parameters
    $to =        "            ";
    $from =    "            ";
    $subject =    "Test message";
    $t =        date("j M Y, H:i:s");
    $errArray = array(
        "The uploaded file exceeds the value permitted in php.ini",
        "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
        "The uploaded file was only partially uploaded",
        "No file was uploaded",
        "Missing a temporary folder",
        "Failed to write file to disk"
    $permittedFileTypes = array(
    //pick up the form variables and clean them a bit
    $name = !empty($_POST['posterName']) ? trim($_POST['posterName']) : "No name provided";
    //test to make sure that the file upload was ok,
    //if not provide the user with a sensible message
    if ($_FILES['uploadedFile']['error'] !== 0):
        $GLOBALS['message'] = "File did not upload ok.  Error was: ". $errArray[$_FILES['uploadedFile']['error']];
    //find out the extension of the uploaded file.
    //this is not a foolproof method !!!!
    $pathinfo = pathinfo($_FILES['uploadedFile']['name']);
    $extension = $pathinfo['extension'];
    if (!in_array($extension, $permittedFileTypes)):
        $GLOBALS['message'] = "Forbidden file type uploaded";
    //we're pretty much ok at this point so it's time to send the mail
    //create the message
    $msg = <<<STR
A contact form was uploaded at $t.

The user gave his name as $name.

The user uploaded a file called {$_FILES['uploadedFile']['name']}.

The uploaded file was {$_FILES['uploadedFile']['size']} bytes.
    //encode the uploaded file for email sending
    //use base 64
    $fileContents = file_get_contents($_FILES['uploadedFile']['tmp_name']);   
    //create a boundary for multipart messages
    $b = md5(time());
    $sep = "\n";
    //create the headers for a multipart email
    $headers  = "From: $from$sep";
    $headers .= "To: $to$sep";
    $headers .= "Return-Path: $from$sep";
    $headers .= "MIME-Version: 1.0$sep";
    $headers .= "Content-Type: multipart/mixed; boundary=\"$b\"$sep";
    $headers .= "$sep";   

    //add useful information for bad email clients
    $message = "This is a multi-part message in mime format $sep";
    $message .= "$sep";   

    //create the message part
    $message .= "--$b$sep";
    $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"$sep";
    $message .= "Content-Transfer-Encoding: 8bit$sep";
    $message .= "$sep";
    $message .= $msg;
    $message .= "$sep";
    $message .= "$sep";
    //create the attachment part
    $message .= "--$b$sep";
    $message .= "Content-Type: application/octet-stream$sep";
    $message .= "Content-Transfer-Encoding: base64$sep";
    $message .= "Content-Disposition: attachment; filename=\"{$_FILES['uploadedFile']['name']}\" $sep";
    $message .= "$sep";   
    $message .= chunk_split( base64_encode($fileContents), 76, $sep );
    $message .= "$sep";
    //finish the mail
    $message .= "--$b--$sep";

    //send the mail
    $result = @mail($to, $subject,$message, $headers);
    if ($result):
        $GLOBALS['message'] = "Mail was sent.  Try again?";
        $GLOBALS['message'] = "Mail was not sent.  Try debugging!";

Share this post

Link to post
Share on other sites


Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.