Multiple File Attachments, PHP Email Script

I need to add multiple file attachment fields to this PHP email script

Page 1 of 1

2 Replies - 13926 Views - Last Post: 13 August 2009 - 11:58 PM Rate Topic: -----

#1 bradleykirwan  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 2
  • Joined: 04-April 09

Multiple File Attachments, PHP Email Script

Post icon  Posted 04 April 2009 - 11:42 PM

Hello there,

I've got a PHP email script that sends me an email with the file attachment that the user specifies.

Example here: http://www.designcen...nz/ultimatetest

Everything works fine with just one attachment but I want to add another attachment or maybe even a total of three.

The code that I am using as follows:

index.html
<html>
<head>
<title>Send an Email</title>
</head>
<body>
<h1>Send an Email</h1>
<form action="mail.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="to" value="bradley@bradleykirwan.co.nz" />
<p>
Email: <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>File Attachment: <input type="file" name="fileatt2" /></p>

<p>File Attachment: <input type="file" name="fileatt3" /></p>
<p><input type="submit" value="Send" /></p>
</form>
</body>
</html>


mail.php
<?php
// 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>";
}
?>



So as you can see, I need to add fileatt2 and fileatt3 to the mail.php script so that the form can process up to three attachments.

I'm very new to PHP so any help will be appreciated.

Thank you kindly.

Is This A Good Question/Topic? 0
  • +

Replies To: Multiple File Attachments, PHP Email Script

#2 bradleykirwan  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 2
  • Joined: 04-April 09

Re: Multiple File Attachments, PHP Email Script

Posted 07 April 2009 - 10:51 PM

Bump! Anybody?
Was This Post Helpful? 0
  • +
  • -

#3 priyankap  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 1
  • Joined: 13-August 09

Re: Multiple File Attachments, PHP Email Script

Posted 13 August 2009 - 11:58 PM

View Postbradleykirwan, on 4 Apr, 2009 - 10:42 PM, said:

Hello there,

I've got a PHP email script that sends me an email with the file attachment that the user specifies.

Example here: http://www.designcen...nz/ultimatetest

Everything works fine with just one attachment but I want to add another attachment or maybe even a total of three.

The code that I am using as follows:

index.html
<html>
<head>
<title>Send an Email</title>
</head>
<body>
<h1>Send an Email</h1>
<form action="mail.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="to" value="bradley@bradleykirwan.co.nz" />
<p>
Email: <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>File Attachment: <input type="file" name="fileatt2" /></p>

<p>File Attachment: <input type="file" name="fileatt3" /></p>
<p><input type="submit" value="Send" /></p>
</form>
</body>
</html>


mail.php
<?php
// 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>";
}
?>



So as you can see, I need to add fileatt2 and fileatt3 to the mail.php script so that the form can process up to three attachments.

I'm very new to PHP so any help will be appreciated.

Thank you kindly.




Hello,
Myself Priyanka.
I have tried your above code but having error 'Mail could not be sent. Sorry!'
Can you please help me why pdf file is not attached via mail?
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1