サービス登録時にメールを送ることがよくあると思います。今回はLaravelでメールを送る方法として比較的簡単なGmailを使った方法を紹介します。
事前にGmailアカウントを作成し、Googleアカウントのセキュリティから、安全性の低いアプリからのアカウントへのアクセスを許可しておいてください(本番で使う場合はアプリパスワードを発行するほうが良いです)
ユーザ登録時に招待メールを送るというシチュエーションを想定して解説していきます。
メールの送信はmailableクラスを通して行います。以下のコマンドで作成します。
$ php artisan make:mail UserRegistered
このコマンドを実行すると、 app/Mail ディレクトリに UserRegistered.php が作成されます。
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; class UserRegistered 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'); } }
mailableクラスを作成したら、メールのテンプレートを作成します。メールのテンプレートは resources/views ディレクトリの中であればどこに配置しても構いません。今回は emails/users ディレクトリを作成し、その中に registered.blade.php を作成します。
作成したBladeファイルは以下のように実装します。
<html> <head> <title>登録ありがとうございます</title> </head> <body> ようこそ {{ @user->name }} さん。 ログインは<a href="{{ url('/login') }}">こちら</a>からお願いします。 </body> </html>
テンプレートを作成したら、 UserRegistered クラスを以下のように修正します。なお、Userクラスは事前に作成してあるものとします。
<?php namespace App\Mail; use App\User; // 追加 use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; class UsersRegistered extends Mailable { use Queueable, SerializesModels; // ビューへ渡すインスタンス public $user; /** * Create a new message instance. * * @return void */ public function __construct(User $user) { $this->user = $user; // 追加 } /** * Build the message. * * @return $this */ public function build() { // テンプレートファイルを指定する return $this->view('emails.users.registered'); } }
mailableクラスで定義したpublicプロパティは、Bladeテンプレートでそのまま利用することができます。
コントローラにメール送信処理を実装します。コントローラは以下のコマンドで作成できます。
$ php artisan make:cotroller UsersController
作成したコントローラを以下のように修正します。
<?php namespace App\Http\Controllers; use App\User; use App\Mail\UserRegistered; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; use App\Http\Controllers\Controller; class UserController extends Controller { /** * ユーザ登録 * * @param Request $request * @return Response */ public function store(Request $request) { $user = User::create($request); Mail::to($user->email)->send(new UserRegistered($user)); } }
最後に.envを以下のように修正します。MAIL_USERNAMEとMAIL_PASSWORDは作成したGmailの設定に沿って変更してください。
MAIL_DRIVER=smtp MAIL_HOST=smtp.googlemail.com MAIL_PORT=465 MAIL_USERNAME=XXXXXXXX@gmail.com MAIL_PASSWORD=XXXXXXXX MAIL_ENCRYPTION=ssl
Laravelからメールを送る方法として比較的簡単なGmailを使った方法を紹介しました。