PHP
開発環境
laravel
mailtrap

MailtrapでLaravelの簡単メール送信テスト

概要

ローカル開発環境でのメール送信設定をしようとするとMailcatcherを入れたりとか、いろいろ面倒ですが、Laravelではとても簡単に行えます。
方法はいくつかありますが、Mailtrapのサービスを利用した方法がとても簡単だったのでご紹介。

Mailtrapの設定

アカウント作成

https://mailtrap.io

GithubアカウントでSign upできます。
開発用アカウントを集約できてありがたい。

認証情報の確認

「Demo inbox」を開くと接続情報が表示されます。

mailtrap-io-setting.png

Laravelの設定

今回はローカル開発環境で使うので .envファイルに設定します。 

Laravel5.4では初期値はこんなかんじです。

#.env 初期値
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

設定するのは「MAIL_PORT」「MAIL_USERNAME」「MAIL_PASSWORD」の3つ。

#.env
MAIL_DRIVER=smtp
MAIL_HOST=[smtp.mailtrap.io]
MAIL_PORT=2525
MAIL_USERNAME=[MailtrapのUsername]
MAIL_PASSWORD=[MailtrapのPassword]
MAIL_ENCRYPTION=null

そしてartisanコマンドで設定を反映。

$ php artisan config:cache

Mailableで実際に送信

Laravelのメール送信の実装も簡単です。
メールクラスもコマンドで簡単生成。

php artisan make:mail TestMail

するとこんなファイルが生成されます。

#/app/Mail/TestMail.php
<?php

namespace App\Mail;

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

class TestMail 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');
    }
}

メールを送信できるようにbuild()メソッドちょい変更。

public function build()
{
    return $this
        ->from('example@example.com')
        ->subject('テスト送信完了')
        ->view('emails.test');
}

メールテンプレートファイルの作成

->view('emails.test')/resources/views/配下のパスを.区切りで表記する規則になっています。

#/resources/views/emails/test.blade.php
テスト送信の本文

送信処理の呼び出し

送信先メールアドレスを設定して、送信するメールクラスのインスタンスをsend()メソッドの引数として呼び出すだけです。

#/app/Http/Controllers/TestMailController.php
Mail::to('test@example.com')
    ->send(new TestMail());

Mailtrapで送信確認

無事送れていました。

mailtrap-io-send.png

ちょっとハマりどころ

Viewファイルがキャッシュされるのか、最初はこんなエラーが出てうまく送信されず。

local.ERROR: View [emails.test] not found.

設定ファイルのキャッシュをリセットしたらViewファイルを認識してくれました。

$ php artisan config:cache