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);

2 Answers 2

3

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!";
}
Sign up to request clarification or add additional context in comments.

2 Comments

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
Just use the input taken from $_FILES like $mail->AddAttachment($_FILES["file1"]["tmp_name"],$_FILES["file1"]["name"])
0

Please see the below link, may this will work for you.

http://kanakvaghela.wordpress.com/2011/05/21/sending-email-with-multiple-attachments-with-php/

All the best.

Kanak Vaghela

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.