1

I am trying to create an email form that allows you to send an attachment. I have pieced code together from my PHP book and several websites.

When I send the email using this form the attachment ends up corrupted and the "$comments" don't seem to go through.

Here is the code I am using:

<?php $to = $_POST['to']; $from = $_POST['from']; $re = $_POST['re']; $comments= $_POST['comments']; $att = $_FILES['att']; $att_path= $_FILES['att']['tmp_name']; $att_name = $_FILES['att']['name']; $att_size = $_FILES['att']['size']; $att_type = $_FILES['att']['type']; //open, read, then close the file $fp = fopen( $att_path, "rb" ); $file = fread( $fp, $att_size ); fclose($fp); #create a boundary string $num = md5(time()); $str = "==Multipart_Boumdary_x{$num}x"; //encode the data for transit $file = chunk_split(base64_encode($file)); //define header $hdr = "MIME-Versio: 1.0\r\n"; $hdr .= "Content-Type: multipart/mixed; "; $hdr .= "boundary=\"{$str}\"\r\n"; $hdr .= "From: $from \r\n"; #define message $msg = "This is a multi-part message in MIME format\r\n\n"; $msg .= "--{$str}\r\n"; $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"; $msg .= "Content-Transfer-Encoding: 8bit\r\n"; $msg .= "$comments\r\n\n"; $msg .= "--{$str}\r\n"; #define the non-text attatchment $msg .= "Content-Type: {$att_type}; "; $msg .= "name=\"{$att_name}\"\r\n"; $msg .= "Content-Disposition: attachment; "; $msh .= "filename=\"{$att_name}\"\r\n"; $msg .= "Content-Transfer-Encoding: base64\r\n"; $msg .= "$file\r\n\n"; $msg .= "--{$str}"; #sendmail $ok = mail( $to, $re, $msg, $hdr ); if( $ok ) echo "OK"; ?> 

So, what am I doing wrong?

Thanks!

1

4 Answers 4

2

You better use http://swiftmailer.org/ or http://phpmailer.worxware.com/

Sign up to request clarification or add additional context in comments.

2 Comments

Swift Mailer seems nice however, the propose of this is for me to better my PHP skills, so I would like to know what I did wrong so that I can improve it.
You can check their sources, they bpth have convinient methods to add all sorts of attachments.
0

Try this to encode your file for transit.

Replace the line:

 $file = chunk_split(base64_encode($file)); 

With:

 //Encode the file for transit $content = ''; $fp = fopen($att_path, 'r'); do { $data = fread($fp, 8192); if (strlen($data) == 0) break; $content .= $data; } while (true); $file = chunk_split(base64_encode($content)); 

1 Comment

That code just seems to put the attachment in the message text.
0

I think you'd find it easier to use a something like PHPMailer http://phpmailer.worxware.com/index.php?pg=phpmailer

Comments

0
$str = "==Multipart_Boumdary_x{$num}x"; 

Hopefully you've tried (notice the spelling of bouNdary):

$str = "==Multipart_Boundary_x{$num}x"; 

1 Comment

Thanks, I fixed that but I am still having the same problem.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.