sanchi Posted July 10, 2009 Share Posted July 10, 2009 I have a requirement to build a webpage that user can use to upload a file. The back end code must send an email to the website administrator with this uploaded file as an attachment. Everything is build and tested except the mail attachment. I tried all the examples I found on the web -- adding boundaries etc., but the acutal email that is sent with an attachment is actually printing all the boundary text and also the file as some encoded chars in the email. can somebody help me resolve this. An working example would be perfect. I just need to send an email with an attachment and the message in HTML format (I dont not need to add both text and html messages) . Thanks for you help. Sanchi Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/ Share on other sites More sharing options...
The Eagle Posted July 10, 2009 Share Posted July 10, 2009 Let's clarify this a bit more, you want a contact form with attachment option? Or do you just want attachment options to be e-mailed to a specified e-mail address. ??? ??? ??? Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872486 Share on other sites More sharing options...
seventheyejosh Posted July 10, 2009 Share Posted July 10, 2009 Let's clarify this a bit more, you want a contact form with attachment option? Or do you just want attachment options to be e-mailed to a specified e-mail address. ??? ??? ??? i think thats what he meant when he said ...user can use to upload a file. The back end code must send an email to the website administrator with this uploaded file as an attachment. he has an upload form, and after the copy function he wants to send an automatic email to a specified address with the uploaded file as an attatchment. Let me see if i can find what i always use. brb. Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872492 Share on other sites More sharing options...
seventheyejosh Posted July 10, 2009 Share Posted July 10, 2009 I believe this is it. <?php //define the receiver of the email $to = '[email protected]'; //define the subject of the email $subject = 'Test email with attachment'; //create a boundary string. It must be unique //so we use the MD5 algorithm to generate a random hash $random_hash = md5(date('r', time())); //define the headers we want passed. Note that they are separated with \r\n $headers = "From: [email protected]\r\nReply-To: [email protected]"; //add boundary string and mime type specification $headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; //read the atachment file contents into a string, //encode it with MIME base64, //and split it into smaller chunks $attachment = chunk_split(base64_encode(file_get_contents('attachment.zip'))); //define the body of the message. ob_start(); //Turn on output buffering ?> --PHP-mixed-<?php echo $random_hash; ?> Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" --PHP-alt-<?php echo $random_hash; ?> Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hello World!!! This is simple text email message. --PHP-alt-<?php echo $random_hash; ?> Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: 7bit <h2>Hello World!</h2> <p>This is something with <b>HTML</b> formatting.</p> --PHP-alt-<?php echo $random_hash; ?>-- --PHP-mixed-<?php echo $random_hash; ?> Content-Type: application/zip; name="attachment.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment <?php echo $attachment; ?> --PHP-mixed-<?php echo $random_hash; ?>-- <?php //copy current buffer contents into $message variable and delete current output buffer $message = ob_get_clean(); //send the email $mail_sent = @mail( $to, $subject, $message, $headers ); //if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" echo $mail_sent ? "Mail sent" : "Mail failed"; ?> if your script is already hardcore integrated, post it and it can be checked over. good luck Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872498 Share on other sites More sharing options...
The Eagle Posted July 10, 2009 Share Posted July 10, 2009 Take a look, I've done the work. ;) <!-- on top of the page --> <?php // Sanchi, please put your email below here. $mailto = "[email protected]"; # Maximum file size (IN BYTES $max_attach_size = 500000; ?> <!-- END on top of the page --> <!-- START PHP form --> <?php /*if (empty($_POST['form_submitted'])) { ?><p>Please fill out the form:</p> <?php } */ if (isset($_POST["form_submitted"])) { $name = $_POST['name']; $email = $_POST['email']; $text = $_POST['text']; unset($errors); if ($email != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/", $email)) $errors[] = "E-mail address seems to be incorrect"; if ($name != "") $errors[] = "Please enter your name"; if ($_FILES['attachm']['size'] > $max_attach_size) $errors[] = "Attachment file size is too big(".number_format($_FILES['attachm']['size']/1000,0,",","")." KB) - maximum size: ".number_format($max_attach_size/1000,0,",","")." KB"; if (empty($errors)) { $text = stripslashes($text); if ($name != "") $mail_name=$name; else $mail_name="SPAM!!"; if ($email != "") $mail_email = $email; else $mail_email = "[email protected]"; $ip = $_SERVER["REMOTE_ADDR"]; // if attachment, MIME-Mail: if (isset($_FILES['attachm']['name']) && trim($_FILES['attachm']['name']) != "") { // read and encode file: $datei_content = fread(fopen($_FILES['attachm']['tmp_name'],"r"),filesize($_FILES['attachm']['tmp_name'])); $datei_content = chunk_split(base64_encode($datei_content),76,"\n"); // Boundary: $boundary = md5(uniqid(rand())); // Mail-Header: $mail_header = "From: ".$mail_name." <".$mail_email.">\n"; $mail_header .= "X-Sender-IP: ".$ip."\n"; $mail_header .= "MIME-Version: 1.0\n"; $mail_header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n"; $mail_header .= "This is a multi-part message in MIME format.\n"; // Mail-Text: $mail_header .= "--".$boundary; $mail_header .= "\nContent-Type: text/plain"; $mail_header .= "\nContent-Transfer-Encoding: 8bit"; $mail_header .= "\n\n".$text; // Attachment: $mail_header .= "\n--".$boundary; $mail_header .= "\nContent-Type: ".$_FILES['attachm']['type']."; name=\"".$_FILES['attachm']['name']."\""; $mail_header .= "\nContent-Transfer-Encoding: base64"; $mail_header .= "\nContent-Disposition: attachment; filename=\"".$_FILES['attachm']['name']."\""; $mail_header .= "\n\n".$datei_content; // End: $mail_header .= "\n--".$boundary."--"; // Sende E-Mail und gebe Fehler bzw. Bestaetigung aus if (@mail($mailto,$mail_subject,"",$mail_header)) $sent = true; else $errors[] = "no connection to the mailserver - please try again later"; } // no attachment, normal E-mail: else { $mail_header = "From: ".$mail_name." <".$mail_email.">\n"; $mail_header .= "X-Sender-IP: $ip\n"; $mail_header .= "Content-Type: text/plain"; if (@mail($mailto,$mail_subject,$text,$mail_header)) $sent = true; else $errors[] = "no connection to the mailserver - please try again later"; } // copy to sender: if (isset($sent) && isset($email) && $email != "" && isset($_POST['copy'])) { if (isset($_FILES['attachm']['name']) && trim($_FILES['attachm']['name']) != "") $copy_mail_text = "Copy of the e-mail:\n\n".$text."\n\nAttachment: ".$_FILES['attachm']['name']; else $copy_mail_text = "Copy of the e-mail:\n\n".$text; $header= "From: ".$mailto."\n"; $header .= "X-Sender-IP: ".$ip."\n"; $header .= "Content-Type: text/plain"; @mail($email, $mail_subject, $copy_mail_text, $header); } } } if (empty($sent)) { if(isset($errors)) { ?><p>Error:</p><ul> <?php foreach($errors as $f) { ?><li> <?php echo $f; ?></li><?php } ?></ul> <br /><?php } ?><form name='myform' method="post" action="" enctype="multipart/form-data"><div> <table cellpadding="2" cellspacing="0"> <tr> <td class="style66" width="100">Your Name:</td> <td class="style66"><input name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""; ?>" size="25" /></td> </tr> <tr> <td class="style66">E-mail Address:</td> <td class="style66"><input name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""; ?>" size="25" /></td> </tr> <tr> <td class="style66">Message:<br>(optional)</td> <td class="style66"><textarea name="text" cols="25" rows="7"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""; ?></textarea></td> </tr> <tr> <td class="style66">Attach file:</td> <td class="style66"><input type="file" name="attachm" value="<?php if (isset($_POST['attachm'])) echo htmlentities(stripslashes($_POST['attachm'])); else echo ""; ?>" size="16" /></td> </tr> <tr> <td></td> <td class="style66" colspan="2"><input type="checkbox" name="copy" value="true" />Send copy to yourself?</td> </tr> <tr> <td></td> <td class="style66"><input type="submit" name="form_submitted" value="Submit!" /></td> </tr> </table> </div></form> <?php } else { if (empty($email)) { ?> <p class="style66">Thank you.<br />Your mail has been sent, but your email address is missing!</p> <?php } else { ?> <p class="style66">Thank you very much for your submission.<br />Your message has been successfully sent and received!</p> <?php } } ?> <!-- END PHP form --> Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872502 Share on other sites More sharing options...
joel24 Posted July 10, 2009 Share Posted July 10, 2009 @the eagle you wrote this? @seventheyejosh this is the same/similar to a mail script I have been using... have you had any troubles with it and gmail? Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872542 Share on other sites More sharing options...
seventheyejosh Posted July 10, 2009 Share Posted July 10, 2009 @joel24 Not that i can think of @joel24 RE that script He is the faster coder ever! did u see the way he just cranked out that script like nobody's business!? @the eagle your code is good but u forgot your exit(); :D :D :D Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872545 Share on other sites More sharing options...
sanchi Posted July 10, 2009 Author Share Posted July 10, 2009 seventheyejosh, I tried you code and it worked for me :-)) Thanks very much. What is wrong with my code. This code simply embed boundary text and the document content in the email and not as attachment. <?php //read the file $file = fopen($uploadfile,'rb'); $data = fread($file, filesize($uploadfile)); fclose($file); //split data into small chunks $data = chunk_split( base64_encode( $data ) ); //add MIME content $semi_rand = md5( time() ); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= "From:".$from_2."\r\n"; $headers .= 'Content-type: multipart/mixed; ' . "\r\n"; $headers .= " boundary=\"{$mime_boundary}\"". "\r\n"; //prepare message $message="-–{$mime_boundary}"."\r\n"; $message.='Content-type: text/html; charset=iso-8859-1' . "\r\n"; $message.='Content-Transfer-Encoding: 7bit' . "\r\n"; $message.=$message_body.$user_sig."\r\n"; $message.="-–{$mime_boundary}"."\r\n"; $message.='Content-type: '.$file_type.';' . "\r\n"; $message.='name "'.$file_name.';"' . "\r\n"; $message.='Content-Disposition: attachment' . "\r\n"; $message.='Content-Transfer-Encoding: bast64' . "\r\n"; $message.=$data; $message.="-–{$mime_boundary}--"."\r\n"; $mail_result = mail($to_2 , $subject , $Body, $headers); ?> Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872860 Share on other sites More sharing options...
sanchi Posted July 10, 2009 Author Share Posted July 10, 2009 I was trying to find out how to highlight the syntax of PHP code in my above posting for easy reading. Any suggestion.. Thanks, Sanchi Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872897 Share on other sites More sharing options...
will35010 Posted July 10, 2009 Share Posted July 10, 2009 I was trying to find out how to highlight the syntax of PHP code in my above posting for easy reading. Any suggestion.. Thanks, Sanchi You have to use code tags. [code] [/code] Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872905 Share on other sites More sharing options...
seventheyejosh Posted July 10, 2009 Share Posted July 10, 2009 ya use either [ code ] //stuff [ / code ] or [ php ] //stuff [ / php ] with no spaces inbetween the [ ] Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872908 Share on other sites More sharing options...
sanchi Posted July 10, 2009 Author Share Posted July 10, 2009 seventheyejosh, I tried you code and it worked for me :-)) Thanks very much. What is wrong with my code. This code simply embed boundary text and the document content in the email and not as attachment. <?php //read the file $file = fopen($uploadfile,'rb'); $data = fread($file, filesize($uploadfile)); fclose($file); //split data into small chunks $data = chunk_split( base64_encode( $data ) ); //add MIME content $semi_rand = md5( time() ); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= "From:".$from_2."\r\n"; $headers .= 'Content-type: multipart/mixed; ' . "\r\n"; $headers .= " boundary=\"{$mime_boundary}\"". "\r\n"; //prepare message $message="-–{$mime_boundary}"."\r\n"; $message.='Content-type: text/html; charset=iso-8859-1' . "\r\n"; $message.='Content-Transfer-Encoding: 7bit' . "\r\n"; $message.=$message_body.$user_sig."\r\n"; $message.="-–{$mime_boundary}"."\r\n"; $message.='Content-type: '.$file_type.';' . "\r\n"; $message.='name "'.$file_name.';"' . "\r\n"; $message.='Content-Disposition: attachment' . "\r\n"; $message.='Content-Transfer-Encoding: bast64' . "\r\n"; $message.=$data; $message.="-–{$mime_boundary}--"."\r\n"; $mail_result = mail($to_2 , $subject , $Body, $headers); ?> Link to comment https://forums.phpfreaks.com/topic/165428-mail-with-attachements-not-working/#findComment-872987 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.