У меня есть сервер с настроенным конвейером электронной почты. Мне удалось сохранить вложения электронной почты с помощью этот, но когда я отправляю изображение, например, с телефона, оно не сохраняется, потому что изображение является «встроенным», а не вложением. Есть ли способ сохранить встроенную картинку?
Как сохранить встроенное изображение в электронном письме, используя конвейер с PHP?
Ответы (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
Спасибо! Итак, как мне сохранить это изображение?
- 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
<img src="data:image/jpeg;.....">
? - person Marc B   schedule 12.05.2015