最近laravelのメール機能を触ったので備忘録としてここに残します。
加えてメールを開発環境上で確認するのに便利なMailtrapを教えていただいたので、Mailtrapの使い方もまとめます。
開発環境
Version | |
---|---|
PHP | 7.4.25 |
Laravel | 6.18.41 |
mailableクラスとviewを作成する
laravelが送信するメールはmailableクラスとして表される。ファイルはApp/Mailディレクトリ以下に置かれる。
php artisan make:mail TestMail
Mailableクラスの設定はbuild()関数の中で設定する。
fromやsubject,replyToメソッドなどで送り主や題名、返信先などを設定する。
viewメソッドはResourcesのviewsディレクトリ以下のブレードを検索する。
view('email.test')であれば、Resources/Views/Email/Test.blade.phpを参照する。
viewでデータを使用し動的にメールを変更させたい時は、publicで変数をおき、constructで値を設定する。そうするとビュー側で設定した変数が使える。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class TestMail extends Mailable
{
use Queueable, SerializesModels;
public $variable;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($variable)
{
$this->variable = $variable;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('email.test')
->subject('テストメールです')
->from('test@mail.com');
}
}
<h1>テストメールです。</h1>
<div>{{ $variable->hello }}</div>
viewメソッドは文面をhtmlで表しますが、textメソッドはそのまま文を書いて送ることができる。
textメソッドの方が使い勝手が良い。
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this// ->view('email.text_test')
->text('email.text')
->subject('テストメールです')
->from('test@mail.com');
}
}
テストメールです。
{{ $variable->hello }}
メールを送信する
メッセージ送信はMailファサードを使って行う。
toメソッドで送信先のメールアドレスを設定する、ccやbccメソッドでcc,bccの設定もできる。
最後にsendメソッドで先ほど作成したmailableクラスのインスタンスを入れる。
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Mail\TestMail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
class SendController extends Controller
{
// 上記省略
public function ship(Request $request)
{
Mail::to($request->email)
->cc('someone@test.com')
->bcc('someone2@test.com')
->send(new TestMail());
}
}
mailableインスタンスの引数にデータを入れればビューで動的にデータを表示できる。
送信したメール内容を確認する
送信したメール確認にはMailTrapを利用できる。
無料で会員登録をして、Inboxes>My InboxのIntegrationsの中からlaravelを選択する。
そうすると以下の環境変数が記述されたファイルが表示されるのでこの値を.envファイル
に入力する。
MAIL_MAILER=(~)
MAIL_HOST=(~)
MAIL_PORT=(~)
MAIL_USERNAME=(~)
MAIL_PASSWORD=(~)
MAIL_ENCRYPTION=(~)
これで設定完了、あとはメールをlaravelから送信した際MailTrapの方に飛んでいく。
ちなみに.envファイルでMAIL_FROM_ADDRESS=
の値を設定すればmailableクラスでfromメソッドを使用しなくてもMAIL_FROM_ADDRESS=
に書かれたアドレスを見てくれる。