У меня есть сервер с настройками электронной почты. Я смог сохранить вложения электронной почты, используя this, но когда я отправляю картинку с моего телефона, например, она не будет сохранена, потому что изображение является «встроенным», а не как вложение. Есть ли способ сохранить встроенную картинку?Как сохранить встроенное изображение в электронном письме, используя трубопровод с PHP?
ответ
Это полный ответ, основанный от ответа 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));
}
Это создаст массив изображений, встроенные в электронной почте и сохранить каждое изображение как сиситемы аренда имя.
инлайн изображение выглядит как это в источнике электронной почты
--------------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 декодирование изображения
Спасибо! Итак, как мне сохранить это изображение? –
После того, как у вас есть база 64, декодируйте ее выход – exussum
Что вы имеете в виду, встроенный? ''? –
Я так предполагаю. Это одно и то же? https://sendgrid.com/blog/embedding-images-emails-facts/ –
Когда вы говорите «__this__», вы ожидаете, что мы прочитаем всю страницу? –