Не получаю переменную $ message в поле зрения из HTML-сообщения Laravel HTML (NON Markdown) - PullRequest
0 голосов
/ 09 мая 2018

Я прочитал несколько похожих вопросов, связанных с этой проблемой, но все они относятся к почтовым сообщениям Markdown.

Я пытаюсь отправить встроенные изображения в почтовые сообщения, но я не нашел способа сделать это правильно(Laravel 5.5).

Документация гласит:

Встроенные вложения

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

<body>
    Here is an image:

    <img src="{{ $message->embed($pathToFile) }}">
</body>

Но при этом я получаю этоошибка:

Неопределенная переменная: сообщение (Просмотр: /path/to/project/resources/views/mails/new_user_welcome.blade.php)

Я знаю, что этоимеет ограничение при использовании Markdown сообщения, но Я не использую одно .


Это связанные файлы:

Mail/NewUserWelcomeEmail.php

class NewUserWelcomeEmail extends Mailable
{
    use SerializesModels;

    public function build()
    {
        return $this->view('mails.new_user_welcome');
    }
}

Resources / views / mails / new_user_welcome.blade.php

@extends('layouts.mail')

@section('content')

    <img src="{{ $message->embed(url("storage/images/inline_image.png")) }}" 
    alt="An inline image" />

@endsection

App / Http / Controllers / UserController.php

public function register(NewUserRequest $request)
{
    // some code

    Mail::to($user)->send(new NewUserWelcomeEmail($user));

    return 'done';
}

Ответы [ 4 ]

0 голосов
/ 17 мая 2018

Ну, если честно, я не нашел способа сделать эту работу должным образом. Я имею в виду, как оно есть, это должно работать. Может быть, это моя установка Laravel (?) ..

Во всяком случае, я сделал это с обходным путем.

1) Используя пакет Eduardokum ' Laravel Mail Auto Embed , это в основном генерирует CID для каждого из ваших медиаресурсов.

Но после добавления этого пакета это не сработало, как ожидалось .. поэтому я:

2) изменить способ, которым я ссылался на свои активы, с этого:

   <img src="{{ url("storage/inline_image.png") }}" />

К этому:

   <img src="{{ asset("storage/inline_image.png") }}" />

Теперь это работает.

0 голосов
/ 14 мая 2018

В моем случае ( Larvel 5.5 ) мне удалось изменить логотип заголовка как в html, так и в уценке .

Документация Laravel , хотя это действительно здорово, может быть лучше в этом отношении.

В любом случае, следуйте этим шагам, и у вас все будет хорошо ...

1 - Публикация почтовых шаблонов через:

php artisan vendor:publish --tag=laravel-mail

, чтобы вы могли легко изменять исходные файлы почты.

2 - Изменить message.blade.php в resources/views/vendor/mail/html следующим образом:

@slot('header')
    @component('mail::header', ['url' => config('app.url')])
        <img src="{{asset('assets/img/pathToYourImage...')}}">
    @endcomponent
@endslot

3 - Все ваши письма должны получать логотип через CID.

Примечание:

В этом примере Laravel автоматически конвертирует активы в CID, поэтому вам вообще не нужно звонить $message->embed(... ...

Пожалуйста, проведите всестороннее тестирование с этими каталогами html / markdown и директивами blade-серверов. Это довольно сложно, но, безусловно, делает свое волшебство ...

0 голосов
/ 15 мая 2018

Вы должны определить переменную пути к файлу в Mailable как открытое свойство -> пример $ pathToFile.

Если у вас есть путь к файлу вне почтового ящика, вы можете передать его конструктору.

class NewUserWelcomeEmail extends Mailable
{
    use SerializesModels;

    // Must be public    
    public $pathToFile;

    /**
    * Create a new message instance.
    */
    public function __construct(string $pathToFile)
    {
        $this->pathToFile= $pathToFile;
    }

    public function build()
    {
        return $this->view('mails.new_user_welcome');
    }
}

Тогда, на ваш взгляд, все работает так, как ожидается:

@extends('layouts.mail')

@section('content')

    <img src="{{ $message->embed(url($pathToFile)) }}" alt="An inline image" />

@endsection
0 голосов
/ 13 мая 2018

, если вы можете использовать это, как это может работать, иначе вы не используете переменную $ message в почтовом блейде

Mail::send('emails.welcome', $data, function ($message) {
    $message->from('us@example.com', 'Laravel');
    $message->to('foo@example.com')->cc('bar@example.com'); 
});

если вы не хотите использовать этот метод, чем вы можете использовать, как это

https://code.tutsplus.com/tutorials/how-to-send-emails-in-laravel--cms-30046

это может быть так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...