91
107

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-14

概要

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

Mailtrapの設定

アカウント作成

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
91
107
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
91
107

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?