@kiranananda

Laravel mail inline img?

Добрый день!

Делаю отправку писем через laravel. Но шаблон у меня задается через админку, а не через view. Далее в коде я проверяю картинки внутри сообщения, подменяю их на inline и делаю отправку. Использую для этого вот такой код:
$this->withSwiftMessage(function ($message) use  ($msg) {
    $message->setBody (preg_replace_callback("|<img.*?data-id=[\'\"]{1}(\d+)[\'\"]{1}.*?>|", function ($matches) use ($message) {
        $img = $matches[0];
        $imgId = $matches[1];

        if (($imgObj = \Backend\Root\Upload\Models\MediaFile::find($imgId))) {
            $sizes = 'orig';               
            if (preg_match('/width=[\'\"]{1}(\d+)[\'\"]{1}/', $img, $width) && preg_match('/height=[\'\"]{1}(\d+)[\'\"]{1}/', $img, $height)) {
                $sizes = \Backend\Root\Upload\Services\Uploads::sizesToStr([ $width[1], $height[1] ]);
            }

            if (isset($imgObj['sizes'][$sizes])) {
                $fName = $message->embed(new \Swift_Image(
		    Storage::disk($imgObj->disk)->get($imgObj->path.$imgObj['sizes'][$sizes]['path'].$imgObj['sizes'][$sizes]['file']), $imgObj['orig_name'])
                );

                $img = preg_replace("/src=[\'\"]{1}.*?[\'\"]{1}/", "src=\"".$fName."\"", $img);
            }
        }

        return $img;
    }, $msg ), 'text/html' );
});


Но дело в том, что метод $message->setBody отказывается работать, так как в ларавеле в классе Mailer методе send сделано так
call_user_func($callback, $message);
$this->addContent($message, $view, $plain, $raw, $data);

И функция addContent перекрывает мой вызов setBody из калбэк функции.

Можно конечно весь этот код в шаблоне реализовать, но это как то не правильно. А как корректно это реализовать? Если я комичну метод $this->addContent то все работает хорошо...
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
@kiranananda Автор вопроса
Решение таки найдено на просторах инета :) . Нужно в конце вызвать код $this->view([], []); Тога функция $message->setBody() начнет работать. Не знаю насколько это вообще где то документировано и не поломают ли разработчики в дальнейшем этот код, но пока работает :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы