Laravel mailTrapでメール送信テスト 備忘録


本記事で達成できること

Laravelでmailtrapを利用したメール送信テストを実装できるようなる。
mailtrapとはメールを送信しても実際の宛先には飛ばさず、Webサイトから確認できるというサービス。

開発環境

cloud9
php 7.0 ※バージョン確認コマンド

php -v

Laravel 5.3.31 ※バージョン確認コマンド

php artisan --version

mailTrapでユーザー登録

以下の記事を参考に登録を行う。
メールの絡む開発にはmailtrapがおすすめ

Laravel側の設定

.env ファイルを開き、以下の初期値を変更する。

変更前:

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

変更後:

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

上記のMAIL_USERNAMEMAIL_PASSWORD=の項目はmailTrapから情報を参照。

メール送信のスクリプト

以下コマンドでメーう送信のために必要なクラスを生成。

php artisan make:mail SendMail

cloud9上の以下のディレクトリ配下にファイルが生成されていることを確認。

app/Mail/SendMail.php

以下のようなファイルが生成される。

SendMail.php
<?php

namespace App\Mail;

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

class SendMail 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('[email protected]')
        ->subject('テスト送信完了')
        ->view('emails.test');
}

※ 変更を加えたview('emails.test');にてメールテンプレートを作成するように記述しているが、テンプレート作成方法に関しては割愛させていただきます。

生成したファイルをインスタンス化してメールを送信するために、
とりあえずroutingは以下のように設定した。

web.php
// つまり "TestMailController" の sendメソッド を利用してメールを送信する
Route::get('/mail','TestMailController@send');

cloud9上の以下のディレクトリ配下に,

app/Http/Controller

TestMailControllerファイルを作成。

TestMailController.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\TestMail;

class TestMailController extends Controller
{
    public function send(){
        return Mail::to('[email protected]')->send(new SendMail());
    }

}

sendメソッドを発火させればmailTrapのダッシュボード上で
メールを受信できていることを確認できる。

以上

参考にした記事:MailtrapでLaravelの簡単メール送信テスト