LoginSignup
9
4

More than 3 years have passed since last update.

Laravel 5.5 ECサイト ユーザーにメールを送る

Last updated at Posted at 2020-12-02

LaravelでMailableを使った簡単なメール通知を行う方法を書きます。

ECサイトで受注後にユーザーにメールを送るという設定です。
Laravel5.5です。

参考にしたサイト https://readouble.com/laravel/5.5/ja/mail.html

mailableクラスを作成

make:mailコマンドを使用して、mailableクラスを生成します。

$ php artisan make:mail OrderAccepted


app/Mail/OrderAccepted.phpというファイルが作られます。

app/Mail/OrderAccepted.php
<?php

namespace App\Mail;

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

class OrderAccepted extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('view.name');
    }
}



以下のように書き加えます。

app/Mails/OrderAccepted.php

<?php

namespace App\Mail;

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

class OrderAccepted extends Mailable
{
    use Queueable, SerializesModels;
        public $order;//追記

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($order) //変更
    {
        $this->order = $order;//追記
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject('ご注文を承りました。')->view('emails.orderAccepted');//追記
    }
}

subject()にはメールのタイトル、
view()にはresouce/view/以下のディレクトリ名とファイル名を記入します。

コントローラー

$orderにデータを入れます。

app/Http/Controller/OrderController.php

//省略

use App\Mail\OrderAccepted;//追記
use Illuminate\Support\Facades\Mail;//追記

class OrderController extends Controller {
//省略


    public function order(Request $request, $id)
    {
        //省略 データベースに注文内容を保存したり、決済処理など。


        $order = (new Order)->find($order_id);//例:$orderに注文内容を格納
        $user = User::find(Auth::id());//メールの宛先
        Mail::to($user->email)->send(new OrderAccepted($order));

        return redirect(route('index'))->with('message', 'ご購入ありがとうございました!ご注文内容をメールにてお送りしました。');

    }

Mailファサードのtoメソッドに宛先を、
sendメソッドにmailableクラスのインスタンスを渡します。

メソッドチェーンで繋ぐとccとbccにも送信可能です。

Mail::to($user->email)
    ->cc($moreUsers)
    ->bcc($evenMoreUsers)
    ->send(new OrderAccepted($order));

View

Viewを準備します。
こちらはviewの一例です。

resources/views/emails/orderAccepted.blade.php
<!DOCTYPE html>
<html lang="ja">
<body>
<p>下記のご注文を承りました。</p>
<p>オーダーID:{{ $order->id}}</p>
<p>注文日:{{ $order->created_at }}</p>
<p>合計金額:{{ $order->amount }}円</p>
<p>配送先:{{ $order->address_name }} 様</p>
<p>ご住所{{ $order->address }}</p>
<p>電話番号:{{ $order->tel }}</p>
<p>この度は<a href="{{ config('app.url') }}">{{ config('app.name') }}</a>をご利用いただきありがとうございました。</p>
</body>
</html>

内容は使用するテーブルのカラムに合わせて変えてください。

注文内容に紐づく注文詳細も載せたい!という場合は、mailableクラスのコンストラクタへ渡す変数を増やせばいいだけです。

メール送信の設定

こちらはgmailの設定です。

.env
//メール送信設定
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxxxx@gmail.com
MAIL_PASSWORD=xxxxxxxxxxxxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=from@email.com
MAIL_FROM_NAME=ECサイト名

メール送信時にエラーが表示される場合は2段階認証プロセスを有効にしてMAIL_PASSWORDにアプリパスワードを入力する必要があります。
こちらを参考にしてください。
アプリ パスワードでログインする

以上です!
簡単にメール送信ができました。

9
4
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
9
4