laravel 5.4 встроить изображение в почту

Я только что обновил мою версию 5.2 laravel до 5.3 а затем до 5.4 после официальных методов обновления.

Теперь я пытаюсь использовать одну из новых функций, чтобы создать электронную почту с уценкой.

Согласно документации, найденной по адресу: https://laravel.com/docs/5.4/mail#view-data

Чтобы внедрить встроенное изображение, используйте метод embed в переменной $message в шаблоне электронной почты. Laravel автоматически делает переменную $message доступной для всех ваших шаблонов электронной почты, поэтому вам не нужно беспокоиться о ее передаче вручную:

Однако это:

<img src="{{ $message->embed(public_path().'/img/official_logo.png') }}">

приведет к следующей ошибке:

Неопределенная переменная: message

Я что-то упускаю? Или есть что-то недокументированное в руководствах по обновлению?

Позднее редактирование:

Я вызываю функцию электронной почты с:

\Mail::to($user)->send(new WelcomeCandidate($user, $request->input('password')));

И WelcomeCandidate выглядит так:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

use App\Models\User;

class WelcomeCandidate extends Mailable
{

    use Queueable, SerializesModels;

    public $user;
    public $password;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(User $user, $password)
    {
        //
        $this->user = $user;
        $this->password = $password;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $this->subject('Welcome!');
        return $this->markdown('emails.welcome-candidate');
    }
}

Ответы

Ответ 1

Похоже, что более старая версия $message-> не работает хорошо с электронными письмами Markdown. Как вы уже упоминали в комментариях, кажется, что он сломан с 5,4

Но вы можете просто попробовать это, как это, в вашем почтовом ящике:

This is your logo 
![Some option text][logo]

[logo]: {{asset('/img/official_logo.png')}} "Logo"

Как показано здесь: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#images

Ссылка на функцию актива: https://laravel.com/docs/5.4/helpers#method-asset

Ответ 2

Попробуй это:

<img src="data:image/png;base64,{{base64_encode(file_get_contents(resource_path('img/email/logo.png')))}}" alt="">

или

![](data:image/png;base64,{{base64_encode(file_get_contents(resource_path('img/email/logo.png')))}})

Ответ 3

Вы можете попробовать следующее:

class WelcomeCandidate extends Mailable
{
    use Queueable, SerializesModels;

    public $message;
    public function __construct(User $user)
    {
        $this->user = $user;
        $this->message = (object) array('image' => '/path/to/file');
    }
}

Ответ 4

Решила мою проблему!

  <img src="{{ $message->embed(base_path() . '/img/logo.png') }}" />
Controller:


\Mail::send(['html' =>'mail'],
        array(
            'name' => $r->name,
            'email' => $r->email,
            'user_message' => $r->message,
           // 'telephone'=>$r->telephone,
           // 'subject'=>$r->subject
        ), function($message) use ($r)  {

            $message->to('[email protected]')->subject('Contact Form || abc.com');
            $message->from($r->email);
            // ->setBody($r->user_message); // assuming text/plain

        });

Если вы находитесь в локальном хосте, вы можете использовать public_path вместо функции base_path

Ответ 5

Вы также можете использовать этот полезный пакет

https://github.com/eduardokum/laravel-mail-auto-embed

Взято из

Его использование очень просто, вы обычно записываете свою уценку:

@component('mail::message')
# Order Shipped

Your order has been shipped!

@component('mail::button', ['url' => $url])
View Order
@endcomponent

Purchased product:

![product](https://example.com/products/product-1.png)

Thanks,<br>
{{ config('app.name') }}
@endcomponent

При отправке он заменит ссылку, которая обычно генерируется:

<img src="https://example.com/products/product-1.png">

встроенным встроенным вложением изображения:

<img src="cid:[email protected]">