Как сохранить встроенное изображение в электронном письме, используя конвейер с PHP?

У меня есть сервер с настроенным конвейером электронной почты. Мне удалось сохранить вложения электронной почты с помощью этот, но когда я отправляю изображение, например, с телефона, оно не сохраняется, потому что изображение является «встроенным», а не вложением. Есть ли способ сохранить встроенную картинку?


person Jacob Richman    schedule 12.05.2015    source источник
comment
что значит встроенный? <img src="data:image/jpeg;.....">?   -  person Marc B    schedule 12.05.2015
comment
Я так предполагаю. Это то же самое? sendgrid.com/blog/embedding-images-emails-facts   -  person Jacob Richman    schedule 12.05.2015
comment
Когда вы говорите это, вы ожидаете, что мы прочитаем всю страницу?   -  person Pedro Lobito    schedule 12.05.2015


Ответы (2)


встроенное изображение выглядит так в источнике электронной почты

--------------090909040108020409080705
Content-Type: image/png;
 name="fideghfb.png"
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>
Content-Disposition: inline;
 filename="fideghfb.png"

BASE64
--------------090909040108020409080705--

Просто возьмите базу 64 из этого, вы ищете блок с Content-Disposition: inline;, а затем base64 декодирует изображение

person exussum    schedule 12.05.2015
comment
Спасибо! Итак, как мне сохранить это изображение? - person Jacob Richman; 12.05.2015

Это полный ответ, основанный на ответе exussum:

    //create the array of base64 strings
    $pieces = explode("Content-Transfer-Encoding: base64", $email);
    array_shift($pieces);
    foreach ($pieces as &$value) {
        $newString = strstr($value, "\n\n");
        $newString = substr($newString, 0, strpos($newString, '--'));
        $PicturesData[] = $newString;
    }

    //save each image
    foreach ($PicturesData as &$value) {
        $name = time() . ".png";
        while(file_exists("pics/" . $name)) {
            $name = time() . ".png";
        }
        file_put_contents("directory/".$name, base64_decode($value));
    }

Это создаст массив изображений, встроенных в электронное письмо, и сохранит каждое изображение под другим именем.

person Jacob Richman    schedule 13.05.2015