【mailtrap】 テストメール

[Mailtrapの公式サイト]
https://taupe.site/entry/mailtrap/

[参照]
https://qiita.com/ubonsa/items/5514fb9c5d5783bcc758

アカウント作成

https://mailtrap.io

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

認証情報の確認

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

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=[ハッシュ値]
MAIL_PASSWORD=[ハッシュ値]
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME=Example

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

$ php artisan config:cache

Mailableで実際に送信

  • メールクラスもコマンドで簡単に生成。
$ php artisan make:mail TestMail

Mail created successfully.

すると、app/Mail/TestMail.phpファイルが生成される。

コントローラ生成

$ php artisan make:controller TestMailController

Controller created successfully.

エラー発生 1

Class 'App\Http\Controllers\Mail' not found

REQUEST_URI "/email/test"

エラー発生 2

Class 'Illuminate\Contracts\Mail' not found

エラー発生 3

[参照] https://reffect.co.jp/laravel/laravel-send-email

Class 'App\Http\Controllers\TestMail' not found

コード

app/Http/Controllers/TestMailController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

/**
 * 追加 (2行)
 */
// use Illuminate\Contracts\Mail;
use Mail;
use App\Mail\TestMail;

class TestMailController extends Controller
{
    public function send()
    {
        Mail::to('test@example.com')
            ->send(new TestMail());
    }   
}

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
            ->from('example@example.com')
            ->subject('テスト送信完了')
            ->view('email.test');
    }
}

Routing

/**
 * Email送受信テスト (SMTP, POP3)
 */
Route::get('/email/test', 'TestMailController@send')->name('email.send');