Dave Fischetti wrote: > On Jan 7, 2008, at 10:14 AM, Alexandru Stanoi wrote: > >> Dave Fischetti wrote: >>> I have all mail coming in and being parsed also redirected to >>> another email account so I see everything that comes in as I test >>> (since the parsed deletes things immediately). It seems that these >>> files coming in are images. in one case the file was named the same >>> in both cases but it wasn't picked up by the parser. The only other >>> attachement in that email was some text file that was blank. so it >>> should have seen the image. Maybe it was just a hiccup. But then >>> another one recently wasn't picked up. This one is from a different >>> phone carrier: >>> Content-Type: image/jpeg; name=m_000c8e00983658a5839ec75edd2031a4.jpg >>> Content-Transfer-Encoding: base64 >>> Content-Location:media1.jpeg >>> Content-ID: <136> >>> /9j/4AAQSkZJRgABAQEAYABgAAD/ >>> 2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a >>> HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/ >>> 2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy >>> MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/ >>> wAARCADiAKoDASIA >>> AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/ >>> 8QAtRAAAgEDAwIEAwUFBAQA >>> AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 >>> ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm >>> p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 >>> +Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA >>> AwE... ... ... ... <snip> >>> The attachment in my mirrored mail shows up fine. The filename is >>> "m_000c8e00983658a5839ec75edd2031a4.jpg" >>> There are 5 other attachments in that email. All are gif files and >>> should be skipped by my code I believe. I actually went back to a >>> few other emails from this carrier and their emails also have jpg >>> images that are missed by the parser. >>> Do you have any other suggestions as to what might be causing this. >>> DO you want me to send the full source for an email that had a >>> missed image? Would more of my code help? >> It would be helpful to have the full mail, and the code which >> process it. >> >> -- >> Alexandru Stanoi >> eZ Components System Developer >> eZ Systems | http://ez.no > > > Here is a good portion of my code. I cut out some stuff that shouldn't > be needed. Thanks again. > > > set_include_path( "/usr/include/php/ezcomponents-2007.1.1:" . > ini_get( "include_path" ) ); > > > // Create a new POP3 transport object by specifying the server name > $pop3 = new ezcMailPop3Transport( "mail.myDomain.com" ); > > // Authenticate to the POP3 server > $pop3->authenticate( "[EMAIL PROTECTED]", "mypass" ); > > // Fetch all messages on the server then delete > $set = $pop3->fetchAll(true); > > // Create a new mail parser object > $parser = new ezcMailParser(); > ezcMailCharsetConverter::setConvertMethod( array( 'myConverter', > 'convertToUTF8IconvNoNotices' ) ); > // Parse the set of messages retrieved from the server > $mails = $parser->parseMail( $set ); > > //print_r($mail); > > foreach ( $mails as $mail ) > { > $from = formatAddress( $mail->from ); > $to = formatToAddress( $mail->to ); > // hack for sprint users > if ($from == "") $from = formatAddress( $mail->returnPath ); // > sometimes from is blank from some carriers > if ($to == "") $to = substr($mail->headers['Delivered-To'],2); // > sometimes to is blank from some carriers > // end hack > > $subject = $mail->subject; > $mailTimeStamp = $mail->timestamp; > if($mailTimeStamp == "" || is_null($mailTimeStamp)) $mailTimeStamp = > time(); > $date = calculateTimeZone(gmdate("Y-m-d H:i:s", $mailTimeStamp),"EST"); > //$date = date("Y-m-d H:i:s", $date); > $date = date("Y-m-d H:i:s"); // set date received > > list($messageTo,$messageToExt) = split('@',$to); > list($messageFrom,$messageFromExt) = split('@',$from); > > > <SNIP> > > > $parts = $mail->fetchParts(); > $newImageBaseName = ""; > > foreach ( $parts as $part ) > { > if ( get_class( $part ) === 'ezcMailText' && $part->subType === > > 'plain' && $bodySet != true ) > { > $bodyFull = trim($part->text); > $bodySet = true; > > } > > ////// MANAGE INCOMING IMAGE ////// > if ( get_class( $part ) === 'ezcMailFile' && $imageSet != true) > { > > $getImage = getimagesize($part->fileName); > if (is_array($getImage) && $getImage !== false) { > $my_image = array_values($getImage); > list($width, $height, $type, $attr) = $my_image; > if ($type == 2 && basename($part->fileName) != > "alltel_logo.jpg") { > $my_ext = > strtolower(strrchr(basename($part->fileName),".")); > $my_ext = ".jpg"; // quick hack for now > if (filesize($part->fileName) < > 4194304) { // only accept images > < 4MB > $imageErr = false; > $imageSet = true; > break; > } else { > $imageErr = 1; > break; > } > } > } else { > $imageErr = 2; > } > } > } > > $body = reply_splitters($bodyFull); > > if($imageSet) { > > $newImageBaseName = $uid . "_" . $mailTimeStamp . $my_ext; > $makeImages = makeThumbnails($part->fileName,$newImageBaseName, > $width, $height, true); > > } > > <SNIP> > > }
Hi Dave, I see you are using eZ Components 2007.1.1. There was an issue in the mail parser which was fixed in 2007.2 (http://issues.ez.no/12062), and that issue applies to your mail: if there is no space before header values, some parts of the mail are ignored. Your mail has Content-Location:media1.jpeg (no space after ':'), so that is the problem. You need to either upgrade to components 2007.2, or modify manually the files: Mail/src/parser/parts/delivery_status_parser.php, line 77 Mail/src/parser/interfaces/part_parser.php, line 175 Mail/src/transports/storage/storage_set.php, line 150 and change the regular expression from "/^([\w-_]*): (.*)/" to "/^([\w-_]*):\s?(.*)/". (you might not have '/src' in the paths above depending on your components installation). Hope this helps. As a side note, your code contains some hidden errors, which you will see if you write this line in php.ini: error_reporting = E_ALL | E_STRICT (for example, $imageSet and $bodySet are not defined). It is considered a good practice to develop with error reporting on. Cheers, Alex. -- Alexandru Stanoi eZ Components System Developer eZ Systems | http://ez.no -- Components mailing list Components@lists.ez.no http://lists.ez.no/mailman/listinfo/components