Wednesday, February 25, 2009

Sending Mails with Attachments

Sending mails with an attachment is more similar to the Sending the general mails. We need to concentrate on the content types.

Example:

we have a form

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"
enctype="multipart/form-data" name="form1">
From name: <input type="text" name="fromname">
From e-mail: <input type="text" name="fromemail">
File: <input type="file" name="filename">
<input type="submit" name="Submit" value="Submit">
</form>

Here we have an to email address text box and the from email textbox an and file option is provided to upload the file.

Here now when an attchment is done and uploaded, Then we retrieve the from email address and the to email address and proceed to the below code

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

// here we check the form is posted or not

$to="totest@testing.com"; // here we retrieve to email address value

$subject="E-mail with attachment"; // Here we store the subject of the mail.

$from = stripslashes($_POST['fromname']) // Here we retrieve the from email address

Now store the file information(uploaded value) to variables for easier access.

$tmp_name = $_FILES['filename']['tmp_name'];
$type = $_FILES['filename']['type'];
$name = $_FILES['filename']['name'];
$size = $_FILES['filename']['size'];

Now we start creating the message content

$message="<html><body><h1>your are trying to send a mail with attachment</h1>";
$message=$message. "Here is your file: $name";

// 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.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/html; 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";
}

0 comments:

Post a Comment