概要
ローカル開発環境でのメール送信設定をしようとするとMailcatcherを入れたりとか、いろいろ面倒ですが、Laravelではとても簡単に行えます。
方法はいくつかありますが、Mailtrapのサービスを利用した方法がとても簡単だったのでご紹介。
Mailtrapの設定
アカウント作成
GithubアカウントでSign upできます。
開発用アカウントを集約できてありがたい。
認証情報の確認
「Demo inbox」を開くと接続情報が表示されます。
Laravelの設定
今回はローカル開発環境で使うので .env
ファイルに設定します。
Laravel5.4では初期値はこんなかんじです。
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つ。
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
するとこんなファイルが生成されます。
<?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/
配下のパスを.
区切りで表記する規則になっています。
テスト送信の本文
送信処理の呼び出し
送信先メールアドレスを設定して、送信するメールクラスのインスタンスをsend()
メソッドの引数として呼び出すだけです。
Mail::to('test@example.com')
->send(new TestMail());
Mailtrapで送信確認
無事送れていました。
ちょっとハマりどころ
Viewファイルがキャッシュされるのか、最初はこんなエラーが出てうまく送信されず。
local.ERROR: View [emails.test] not found.
設定ファイルのキャッシュをリセットしたらViewファイルを認識してくれました。
$ php artisan config:cache