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]">