tags:

views:

24

answers:

1

Hi I need help to get the script below sending attachments, Im fairly new to php and cant seem to get the attachments working , the email does send but I think the heaaders are corrupt and return garbge as opposed to the attached files

$to      = $_SESSION['companymail']; 

  $email   = $_POST['email']; 

  $name    = $_POST['fullname'];

  $subject = $subject; 

  $comment = $message;







  $To          = strip_tags($to);

  $TextMessage =strip_tags(nl2br($comment),"<br>");

  $HTMLMessage =nl2br($comment);

  $FromName    =strip_tags($name);

  $FromEmail   =strip_tags($email);

  $Subject     =strip_tags($subject);



  $boundary1   =rand(0,9)."-"

  .rand(10000000000,9999999999)."-"

  .rand(10000000000,9999999999)."=:"

  .rand(10000,99999);

  $boundary2   =rand(0,9)."-".rand(10000000000,9999999999)."-"

  .rand(10000000000,9999999999)."=:"

  .rand(10000,99999);







  for($i=0; $i < count($_FILES['fileatt']['name']); $i++){

  if(is_uploaded_file($_FILES['fileatt']['tmp_name'][$i]) && 

     !empty($_FILES['fileatt']['size'][$i]) && 

     !empty($_FILES['fileatt']['name'][$i])){



  $attach      ='yes';

  $end         ='';



     $handle      =fopen($_FILES['fileatt']['tmp_name'][$i], 'rb'); 

     $f_contents  =fread($handle, $_FILES['fileatt']['size'][$i]); 

     $attachment[]=chunk_split(base64_encode($f_contents));

     fclose($handle); 



  $ftype[]       =$_FILES['fileatt']['type'][$i];

  $fname[]       =$_FILES['fileatt']['name'][$i];

  }

  }



/***************************************************************

HTML Email WIth Multiple Attachment <<----- Attachment ------

 ***************************************************************/



if($attach=='yes') {



$attachments='';

$Headers     =<<<AKAM

From: $FromName <$FromEmail>

Reply-To: $FromEmail

MIME-Version: 1.0

Content-Type: multipart/mixed;

 boundary="$boundary1"

AKAM;



for($j=0;$j<count($ftype); $j++){

$attachments.=<<<ATTA

--$boundary1

Content-Type: $ftype[$j];

 name="$fname[$i]"

Content-Transfer-Encoding: base64

Content-Disposition: attachment;

 filename="$fname[$j]"



$attachment[$j]



ATTA;

}



$Body        =<<<AKAM

This is a multi-part message in MIME format.



--$boundary1

Content-Type: multipart/alternative;

 boundary="$boundary2"



--$boundary2

Content-Type: text/plain;

 charset="windows-1256"

Content-Transfer-Encoding: quoted-printable



$TextMessage

--$boundary2

Content-Type: text/html;

 charset="windows-1256"

Content-Transfer-Encoding: quoted-printable



$HTMLMessage



--$boundary2--



$attachments

--$boundary1--

AKAM;

}





  /***************************************************************

   Sending Email

   ***************************************************************/

  $ok=mail($To, $Subject, $Body, $Headers);
+1  A: 

I don't recommend to reinvent the wheel, try to use a free available class with high reputation.

Check out PHPMailer

require_once('../class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"

$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);

$mail->AddReplyTo("[email protected]","First Last");

$mail->SetFrom('[email protected]', 'First Last');

$mail->AddReplyTo("[email protected]","First Last");

$address = "[email protected]";
$mail->AddAddress($address, "John Doe");

$mail->Subject    = "PHPMailer Test Subject via mail(), basic";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
Pentium10
Thanks for your answer, how can you use the line $mail->AddAttachment("images/phpmailer.gif"); // attachment$mail->AddAttachment("images/phpmailer_mini.gif"); by getting the file details directly from the form post, in my case I would like to handle multiple attachments
tom
Just use the input taken from $_FILES like `$mail->AddAttachment($_FILES["file1"]["tmp_name"],$_FILES["file1"]["name"])`
Pentium10