我刚刚将5.2
laravel安装升级到5.3
,然后按照官方升级方法升级到5.4
。
我现在正尝试使用其中一项新功能,以创建降价形式的电子邮件。
根据https://laravel.com/docs/5.4/mail#view-data
上的文件要嵌入内嵌图像,请使用
$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');
}
}
答案 0 :(得分:16)
似乎较早的$ message-&gt;嵌入与Markdown电子邮件不兼容。 Like you mentioned in the comments it seems broken since 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
答案 1 :(得分:7)
试试这个:
<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')))}})
答案 2 :(得分:3)
您也可以使用这个有用的包
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:3991f143cf1a86257f8671883736613c@Swift.generated">
答案 3 :(得分:1)
解决了我的问题!
<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('abc@gmail.com')->subject('Contact Form || abc.com');
$message->from($r->email);
// ->setBody($r->user_message); // assuming text/plain
});
如果您在localhost中,则可以使用public_path而不是base_path函数
答案 4 :(得分:1)
我刚刚遇到了同样的问题,并找到了解决方案。
在渲染图像之前,您必须使用以下命令创建从“ public / storage”到“ storage / app / public”的符号链接:
php artisan storage:link
在“存储/应用/公共”中,您应该有一个文件夹“图像” 现在,您可以在markdown.blade.php中呈现此代码:
!['alt_tag']({{Storage::url('/images/your_image.png')}})
第二个选项类似:
!['alt_text']({{Storage::url($comment->user->image->path)}})
两个都很好
答案 5 :(得分:0)
您可以尝试以下方法:
pd.concat([df, df.A], axis=1)
A A
0 1.0 NaN
1 2.0 1.0
2 3.0 2.0
3 NaN 3.0
答案 6 :(得分:0)
在后端,我创建了用于显示图像的端点。并将我需要的图像放在资源/ img 中。 Laravel 代码如下所示:
public function getImage($name)
{
return response()->file(base_path() . '/resources/img/' . $name . '.png');
}
然后在我的 html 电子邮件模板中,我创建了带有背景图像的 div。
<div style='background: url("https://mysite1.com/api/v1/get_image/logo")'></div>
它对我有用。