Sending PHP email with attachment

by MD on 2009/09/25

Using this code below we can send a mail using PHP and can also send any file from PHP as mail attachment

<html>
<head>
<title> Sending Email with attachment from PC</title>
</head>
<body>

<?php
if (isset($_REQUEST['to']))
		//if "email" is filled out, send email
		  {
		// Read POST request params into global vars
		$to      = $_POST['to'];
		$from    = $_POST['from'];
		$subject = $_POST['subject'];
		$message = $_POST['message'];

		// Obtain file upload vars
		$fileatt      = $_FILES['fileatt']['tmp_name'];
		$fileatt_type = $_FILES['fileatt']['type'];
		$fileatt_name = $_FILES['fileatt']['name'];

		$headers = "From: $from";

		if (is_uploaded_file($fileatt)) {
		  // Read the file to be attached ('rb' = read binary)
		  $file = fopen($fileatt,'rb');
		  $data = fread($file,filesize($fileatt));
		  fclose($file);

		  // Generate a boundary string
		  $semi_rand = md5(time());
		  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

		  // Add the headers for a file attachment
		  $headers .= "\nMIME-Version: 1.0\n" .
					  "Content-Type: multipart/mixed;\n" .
					  " boundary=\"{$mime_boundary}\"";

		  // Add a multipart boundary above the plain message
		  $message = "This is a multi-part message in MIME format.\n\n" .
					 "--{$mime_boundary}\n" .
					 "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
					 "Content-Transfer-Encoding: 7bit\n\n" .
					 $message . "\n\n";

		  // Base64 encode the file data
		  $data = chunk_split(base64_encode($data));

		  // Add file attachment to the message
		  $message .= "--{$mime_boundary}\n" .
					  "Content-Type: {$fileatt_type};\n" .
					  " name=\"{$fileatt_name}\"\n" .
					  //"Content-Disposition: attachment;\n" .
					  //" filename=\"{$fileatt_name}\"\n" .
					  "Content-Transfer-Encoding: base64\n\n" .
					  $data . "\n\n" .
					  "--{$mime_boundary}--\n";
		}

		// Send the message
		$ok = @mail($to, $subject, $message, $headers);
		if ($ok) {
		  echo "<p>Mail sent! Yay PHP!</p>";
		} else {
		  echo "<p>Mail could not be sent. Sorry!</p>";
		}
	}
	else
//if "email" is not filled out, display the form
  {
	  ?><h1>Send an Email</h1>
			<form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">

			<p>To: <input type="text" name="to" value="" /><br />

			From: <input type="text" name="from" value="" /><br />

			Subject: <input type="text" name="subject" value="" /></p>

			<p>Message:<br />
			<textarea cols="70" rows="20" name="message"></textarea></p>

			<p>File Attachment: <input type="file" name="fileatt" /></p>

			<p><input type="submit" value="Send" /></p>

			</form>
		<?php
  }
?>
</body>
</html>

You may also like:

Leave a Comment

Previous post:

Next post: