LoginSignup
0
0

More than 3 years have passed since last update.

EC2のLaravel6.0環境で記事投稿時にメールMailgunを使いメール送信する AWS/Laravel連載(15)

Last updated at Posted at 2019-10-22

はじめに

前回までの記事で作ってきたアプリケーションで、投稿した場合にメールが届くようにしてみましょう。
EC2のLaravel6.0環境でMailgunを使いメール送信する AWS/Laravel連載(14)

mail.png

Mailableクラスを作る

基本的にいつもどおり公式ドキュメントに沿っていきます。
メール 6.0 Laravel

$ php artisan make:mail PostSent --markdown=emails.posts.sent

Mailableクラスのapp/Mail/PostSent.phpと、メール本文resources/views/emails/posts/sent.blade.phpの2ファイルが生成されます。

app/Mail/PostSent.php
<?php

namespace App\Mail;

use App\Post;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class PostSent extends Mailable implements ShouldQueue
{
    use Queueable, SerializesModels;

    protected $post;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(Post $post)
    {
        $this->post = $post;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('rfdnxbro@gmail.com')
                    ->subject('新しく投稿しました')
                    ->markdown('emails.posts.sent')
                    ->with(['postTitle' => $this->post->title]);
    }
}

implements ShouldQueueしているので、送信時に自動的にキューが有効になります。
比較的処理が重いメール送信処理が完了しないと投稿時APIのレスポンスが来ないのはイマイチなためです。

resources/views/emails/posts/sent.blade.php
@component('mail::message')
# 投稿がありました

{{ $postTitle }}

@component('mail::button', ['url' => route('home')])
投稿を見る
@endcomponent

{{ config('app.name') }}
@endcomponent

投稿時のクラスにメール送信部分を実装します。

app/Http/Controllers/PostController.php
<?php

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;
use App\Mail\PostSent;
use Illuminate\Support\Facades\Mail;
...
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'title' => 'required|max:255',
            'content' => 'required',
        ]);
        $post = $request->user()->posts()->create($request->all());
        Mail::to($request->user())->send(new PostSent($post));
        return $post;
    }

mail.png

本日は以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0