Изоляция прикрепленного изображения из электронной почты с помощью php - PullRequest
2 голосов
/ 01 декабря 2009

Я использую следующий скрипт 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;
}
}

Мне интересно, с чего бы мне начать, чтобы принять вложение изображения и выделить его в переменную, чтобы я мог обработать его так, как мне нужно.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2009

Я бы использовал 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 голосов
/ 01 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...