Laravel显示base64图像

时间:2016-08-29 14:12:30

标签: php laravel gmail base64

如果我收到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标记被忽略

2 个答案:

答案 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>