2009-11-30 3 views
2

Я использую следующий скрипт php для получения и обработки электронных писем, в результате чего различные элементы в переменных обрабатываются позже.Изолирование прикрепленного изображения с помощью электронной почты с помощью 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 интересно, где бы я начать, чтобы принять вложение изображения и изолировать, что в переменную, чтобы я мог его обработать, однако мне необходимо.

ответ

0

Вам нужно будет сделать больше, чем то, что вы делаете. Вы должны обнаружить границы mime в заголовке, затем найти многостраничную границу и unbase64 текст. Вам было бы гораздо лучше использовать library для такого рода вещей.

+0

вот что я был напуган от, прочь к Google! спасибо за отзыв btw – mrpatg

2

Я хотел бы использовать MimeMailParse (http://code.google.com/p/php-mime-mail-parser/) Тогда вы могли бы просто сказать

 
$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

nice find, плохо смотри в это больше – mrpatg

Смежные вопросы