2009-11-30 8 views
2

J'utilise le script php suivant pour recevoir et traiter des emails, en mettant les différentes parties dans des variables à gérer plus tard.Isoler l'image jointe d'un email avec php

#!/usr/bin/php -q 
<?php 
// read from stdin 
$fd = fopen("php://stdin", "r"); 
$email = ""; 
while (!feof($fd)) { 
$email .= fread($fd, 1024); 
} 
fclose($fd); 

// handle email 

$lines = explode("\n", $email); 

// empty vars 

$from = ""; 
$subject = ""; 
$headers = ""; 
$message = ""; 
$splittingheaders = true; 

for ($i=0; $i < count($lines); $i++) { 
if ($splittingheaders) { 
// this is a header 
$headers .= $lines[$i]."\n"; 
// look out for special headers 
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) { 
$subject = $matches[1]; 
} 
if (preg_match("/^From: (.*)/", $lines[$i], $matches)) { 
$from = $matches[1]; 
} 
} else { 
// not a header, but message 
$message .= $lines[$i]."\n"; 
} 

if (trim($lines[$i])=="") { 
// empty line, header section has ended 
$splittingheaders = false; 
} 
} 

Im se demandant où je voudrais commencer afin d'accepter une pièce jointe d'image et isoler ce dans une variable afin que je puisse le traiter mais je devais.

Répondre

0

Vous auriez besoin de faire beaucoup plus que ce que vous faites. Vous devez détecter les limites mime dans l'en-tête, puis trouver la limite multipart et unbase64 le texte. Vous seriez beaucoup mieux d'utiliser un library pour ce genre de chose.

+0

thats ce que j'étais affraid de, hors de google! merci pour la pointe btw – mrpatg

2

J'utiliser MimeMailParse (http://code.google.com/p/php-mime-mail-parser/) Ensuite, vous pouvez simplement dire

 
$parser = new MimeMailParser(); 
$parser->setStream(STDIN); 

// Handle images 
$path = '/tmp/'; 
$filename = ''; 
$attachments = $parser->getAttachments(); 
foreach ($attachments as $attachment) { 
    if (preg_match('/^image/', $attachment->content_type, $matches)) { 
     $pathinfo = pathinfo($attachment->filename); 
     $filename = $pathinfo['filename']; 

     if ($fp = fopen($path.$filename, 'w')) { 
      while ($bytes = $attachment->read()) { 
       fwrite($fp, $bytes); 
      } 
      fclose($fp); 
     } 
    } 
} 
+0

belle trouvaille, mauvais coup d'oeil dans ce plus – mrpatg