atomique Posted May 23, 2008 Share Posted May 23, 2008 Hello all - I'm trying to export an image from flash and send that image through email using PHP. The jpg is exporting just fine, but I am uncertain as to how to attach it to an email. I'm using sephiroth's print class to export the jpg. Here is the code that renders the image in a browser: <?php error_reporting(0); /** * Get the width and height of the destination image * from the POST variables and convert them into * integer values */ $w = (int)$_POST['width']; $h = (int)$_POST['height']; // create the image with desired width and height $img = imagecreatetruecolor($w, $h); // now fill the image with blank color // do you remember i wont pass the 0xFFFFFF pixels // from flash? imagefill($img, 0, 0, 0xFFFFFF); $rows = 0; $cols = 0; // now process every POST variable which // contains a pixel color for($rows = 0; $rows < $h; $rows++){ // convert the string into an array of n elements $c_row = explode(",", $_POST['px' . $rows]); for($cols = 0; $cols < $w; $cols++){ // get the single pixel color value $value = $c_row[$cols]; // if value is not empty (empty values are the blank pixels) if($value != ""){ // get the hexadecimal string (must be 6 chars length) // so add the missing chars if needed $hex = $value; while(strlen($hex) < 6){ $hex = "0" . $hex; } // convert value from HEX to RGB $r = hexdec(substr($hex, 0, 2)); $g = hexdec(substr($hex, 2, 2)); $b = hexdec(substr($hex, 4, 2)); // allocate the new color // N.B. teorically if a color was already allocated // we dont need to allocate another time // but this is only an example $test = imagecolorallocate($img, $r, $g, $b); // and paste that color into the image // at the correct position imagesetpixel($img, $cols, $rows, $test); } } } // print out the correct header to the browser header("Content-type:image/jpeg"); // display the image imagejpeg($img, "", 90); ?> Here is the mailform I am using. It is currently working in flash without trying to attach the image: <? include("proc_form_vars.php"); //standard form values $toMail = procformvar("post","toEmail",""); $toName = procformvar("post","toName",""); $fromMail = procformvar("post","fromEmail",""); $fromName = procformvar("post","fromName",""); $dl = procformvar("post","dl",""); //mailformvars("[email protected]",""); $subject = "$emailSubject"; $headers = "From: $fromMail\n"; $headers = $headers . "MIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-1"; $scriptpath = str_replace("send_email.php","/",$_SERVER["SCRIPT_NAME"]); $serverPath = "http://". $_SERVER["HTTP_HOST"].$scriptpath; $linkUrl = $serverPath."test.html"; $emailSubject = "You've received a customized wallpaper!"; //$linkUrl = $siteURL.$dl; //$linkUrl = $serverPath; $mailText = "<font face=\"Arial\"> $toName - <br> $fromName has sent you a customized wallpaper! </font>"; mailformvars("[email protected]"); if (mail($toMail,$fromName." "."$emailSubject",$mailText,$headers)) { echo "&script_message=ok"; } else { echo "&script_message=failed"; } ?> Any suggestions on how I go about combining the two? Thanks for any help you can give! Link to comment https://forums.phpfreaks.com/topic/106983-attach-on-the-fly-jpg-to-email/ Share on other sites More sharing options...
rhodesa Posted May 23, 2008 Share Posted May 23, 2008 Doing attachments on an email can get a little tricky. There is some information here on how to do attachments: http://www.zend.com/zend/spotlight/sendmimeemailpart1.php But, it's a lot easier to use this script, which will do all the grunt work for you: http://phpmailer.codeworxtech.com/ Link to comment https://forums.phpfreaks.com/topic/106983-attach-on-the-fly-jpg-to-email/#findComment-548374 Share on other sites More sharing options...
atomique Posted May 23, 2008 Author Share Posted May 23, 2008 I'm really confused. Sorry, I've hardly worked with PHP before. Link to comment https://forums.phpfreaks.com/topic/106983-attach-on-the-fly-jpg-to-email/#findComment-548570 Share on other sites More sharing options...
atomique Posted May 26, 2008 Author Share Posted May 26, 2008 Is there any way to implement the scripts I already have? Any help would be greatly appreciated. Link to comment https://forums.phpfreaks.com/topic/106983-attach-on-the-fly-jpg-to-email/#findComment-550290 Share on other sites More sharing options...
rarebit Posted May 26, 2008 Share Posted May 26, 2008 Looking at that zend link rhodesa gave you basically explains the deal by the looks of it. Basically you'll have to set the 'Content-Type' to 'multipart/mixed', and add a boundary delimiter, say 'boundary="ZEND-12345";'. Then you handle each part of the email seperately, the normal part of the email then the image part, e.g. Content-Type: image/jpeg; name="zendlogo.jpg"; Content-Transfer-Encoding: base64 Content-Disposition: attachment <base64 encoded data for the zendlogo.jpg image> --ZEND-12345-- Where it says about base64, thats where you need to dump your image. This is the binary of the image encoded into base64. To do this you'll probably want to save the image to file (not send to browser), afterwards delete it from file... It's simpler that you think. Link to comment https://forums.phpfreaks.com/topic/106983-attach-on-the-fly-jpg-to-email/#findComment-550318 Share on other sites More sharing options...
atomique Posted May 26, 2008 Author Share Posted May 26, 2008 <? error_reporting(0); include("proc_form_vars.php"); $toMail = procformvar("post","toEmail",""); $toName = procformvar("post","toName",""); $fromMail = procformvar("post","fromEmail",""); $fromName = procformvar("post","fromName",""); $dl = procformvar("post","dl",""); $subject = "You've received a Custom Wallpaper!"; $headers = "From: $fromMail\n"; $headers = $headers . "MIME-Version: 1.0\nContent-type: multipart/mixed; boundary=\"BOUNDARY\"; \n"; $headers = $headers . "Content-Transfer-Encoding: 7bit\n"; $headers = $headers . "This part of the E-mail should never be seen.\n--BOUNDARY\n"; $scriptpath = str_replace("send_email.php","/",$_SERVER["SCRIPT_NAME"]); $serverPath = "http://". $_SERVER["HTTP_HOST"].$scriptpath; $linkUrl = $serverPath."test.html"; $mailText = "<font face=\"Arial\"> $toName - <br> $fromName has sent you a customized wallpaper! </font>"; $w = (int)$_POST['width']; $h = (int)$_POST['height']; $img = imagecreatetruecolor($w, $h); imagefill($img, 0, 0, 0xFFFFFF); $rows = 0; $cols = 0; for($rows = 0; $rows < $h; $rows++){ $c_row = explode(",", $_POST['px' . $rows]); for($cols = 0; $cols < $w; $cols++){ $value = $c_row[$cols]; if($value != ""){ $hex = $value; while(strlen($hex) < 6){ $hex = "0" . $hex; } $r = hexdec(substr($hex, 0, 2)); $g = hexdec(substr($hex, 2, 2)); $b = hexdec(substr($hex, 4, 2)); $test = imagecolorallocate($img, $r, $g, $b); imagesetpixel($img, $cols, $rows, $test); } } } //$headers .= "Content-type:image/jpeg; filename=\"wallpaper.jpg\";"); //imagejpeg($img, "", 100); $fileatt = $img; $fileatttype = "image/jpg"; $fileattname = "wallpaper.jpg"; $file = fopen( $fileatt, 'rb' ); $data = fread( $file, filesize( $fileatt ) ); fclose( $file ); $semi_rand = md5( time() ); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; $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"; $data = chunk_split( base64_encode( $data ) ); ?> Okay, now I have this, and it isn't working. Am I close? Link to comment https://forums.phpfreaks.com/topic/106983-attach-on-the-fly-jpg-to-email/#findComment-550381 Share on other sites More sharing options...
atomique Posted May 27, 2008 Author Share Posted May 27, 2008 Anyone? Link to comment https://forums.phpfreaks.com/topic/106983-attach-on-the-fly-jpg-to-email/#findComment-550878 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.