LoginSignup
0
0

More than 1 year has passed since last update.

laravelのメール機能

Posted at

最近laravelのメール機能を触ったので備忘録としてここに残します。
加えてメールを開発環境上で確認するのに便利なMailtrapを教えていただいたので、Mailtrapの使い方もまとめます。

開発環境

Version
PHP 7.4.25
Laravel 6.18.41

mailableクラスとviewを作成する

laravelが送信するメールはmailableクラスとして表される。ファイルはApp/Mailディレクトリ以下に置かれる。

php artisan make:mail TestMail

Mailableクラスの設定はbuild()関数の中で設定する。
fromやsubject,replyToメソッドなどで送り主や題名、返信先などを設定する。
viewメソッドはResourcesのviewsディレクトリ以下のブレードを検索する。
view('email.test')であれば、Resources/Views/Email/Test.blade.phpを参照する。

viewでデータを使用し動的にメールを変更させたい時は、publicで変数をおき、constructで値を設定する。そうするとビュー側で設定した変数が使える。

App/Mail/TestMail.php
<?php

namespace App\Mail;

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

class TestMail extends Mailable
{
    use Queueable, SerializesModels;

    public $variable;

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

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('email.test')
                    ->subject('テストメールです')
                    ->from('test@mail.com');
    }
}
Resorces/Views/Emails/test.blade.php
<h1>テストメールです</h1>
<div>{{ $variable->hello }}</div>

viewメソッドは文面をhtmlで表しますが、textメソッドはそのまま文を書いて送ることができる。
textメソッドの方が使い勝手が良い。

App/Mail/TestMail.php
  /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this// ->view('email.text_test')
                    ->text('email.text')
                    ->subject('テストメールです')
                    ->from('test@mail.com');
    }
}
Resorces/Views/Emails/text_test.blade.php
テストメールです
{{ $variable->hello }}

メールを送信する

メッセージ送信はMailファサードを使って行う。
toメソッドで送信先のメールアドレスを設定する、ccやbccメソッドでcc,bccの設定もできる。
最後にsendメソッドで先ほど作成したmailableクラスのインスタンスを入れる。

App/Http/Controllers/SendController.php
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Mail\TestMail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class SendController extends Controller
{

    // 上記省略
    public function ship(Request $request)
    {
        Mail::to($request->email)
            ->cc('someone@test.com')
            ->bcc('someone2@test.com')
            ->send(new TestMail());
    }
}

mailableインスタンスの引数にデータを入れればビューで動的にデータを表示できる。

送信したメール内容を確認する

送信したメール確認にはMailTrapを利用できる。
無料で会員登録をして、Inboxes>My InboxのIntegrationsの中からlaravelを選択する。
そうすると以下の環境変数が記述されたファイルが表示されるのでこの値を.envファイルに入力する。

MAIL_MAILER=(~)
MAIL_HOST=(~)
MAIL_PORT=(~)
MAIL_USERNAME=(~)
MAIL_PASSWORD=(~)
MAIL_ENCRYPTION=(~)

これで設定完了、あとはメールをlaravelから送信した際MailTrapの方に飛んでいく。
ちなみに.envファイルでMAIL_FROM_ADDRESS=の値を設定すればmailableクラスでfromメソッドを使用しなくてもMAIL_FROM_ADDRESS=に書かれたアドレスを見てくれる。

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