如果我收到base64格式的数据,如何发送带附加图像的电子邮件?
这是邮件模板:
<h1>You got mail from - {{$user->name}}</h1>
<h2>Date:</h2>
<p>{{$post->created_at}}</p>
<h2>Message:</h2>
<p>{{$post->body}}</p>
<img src="data:image/png;base64, {{$image}}">
<div>
</div>
逻辑:
public function createPost()
{
$user = JWTAuth::toUser();
$user->posts()->create(['user_id' => $user->id, 'body' => Input::get('comment.body')]);
Mail::send('mail.template', [
'image' => Input::get('image'),
'user' => $user,
'post' => Post::where('user_id', $user->id)->get()->last(),
], function ($m) use ($user) {
$m->from('xyz@app.com', 'XYZ');
$m->to('xyz@gmail.com', $user->name)->subject('Subject');
});
}
从此我只收到带有完整base64字符串的邮件... img
标记被忽略
答案 0 :(得分:1)
附件
要向电子邮件添加附件,请使用附件中的附加方法 可邮寄的课程&#39;构建方法。 attach方法接受完整路径 将文件作为其第一个参数:
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->attach('/path/to/file');
}
更多信息here (for Laravel 5.3)。 我希望,这会有所帮助。
答案 1 :(得分:1)
我想出的解决方案是首先保存图像,以便Viktor建议将其附加,尽管我没有Laravel 5.3。所以方法有些不同。
用户可能会也可能不会发送图片,因此方法如下:
$destinationPath = null;
if($request->has('image')){
// save received base64 image
$destinationPath = public_path() . '/uploads/sent/uploaded' . time() . '.jpg';
$base64 = $request->get('image');
file_put_contents($destinationPath, base64_decode($base64));
}
然后将保存的图像附加到邮件:
Mail::send('mail.template', [
'user' => $user,
'post' => Post::where('user_id', $user->id)->get()->last(),
], function ($m) use ($user) {
$m->from('xyz@app.com', 'XYZ');
$m->to('xyz@gmail.com', $user->name)->subject('Subject');
if($request->has('image')){
$m->attach($destinationPath);
}
});
邮件模板:
<h1>You got mail from - {{$user->name}}</h1>
<h2>Date:</h2>
<p>{{$post->created_at}}</p>
<h2>Message:</h2>
<p>{{$post->body}}</p>