Written by Manabu Bannai

【Laravel5.4】会員登録を完了した人に登録完了メールを送る方法【マークダウン】

Laravel PROGRAMMING

Laravel5.4で会員登録を完了した人に登録完了メールを送る方法です。Laravelではマークダウンで送信メールを作成し、簡単にHTMLメールを送ることができます。実装方法を見ていきましょう。

スポンサードサーチ


会員登録完了後にMailファンクションを実行する

ここは環境にあわせて変更してください。下記が実装イメージです。
編集ファイル:/app/Http/Controllers/RegistrationController.php

<?php

use App\Mail\Welcome;

class RegistrationController extends Controller
{

	public function store(){

		$this->validate(request(), [
			'name' => 'required',
			'email' => 'required|email|unique:users',
			'password' => 'required',
		]);

		$user = new User;
		$user->name = request('name');
		$user->email = request('email');
		$user->password = bcrypt(request('password'));
		$user->save();

		auth()->login($user);

		// 登録完了メールを送る
		\Mail::to($user)->send(new Welcome($user));

		return redirect('/');

	}
}

マークダウンで記述できるメール機能をartisanで作成する

$ php artisan make:mail Welcome --markdown="emails.welcome"

すると、/app/Mail/Welcome.php/resources/views/emails/welcome.blade.phpが生成されます。

Mailtrapを利用して、テストメールを送信する

Mailtrapは開発者向けのメール送信機能のデバッグツールです。
会員登録すると無料で利用できます。
» Mailtrap.io

こんな感じでDemo inboxを作成します。
 


Credentialsが簡単に取得できます。これをLaravelに記入すればOK。

Credentials情報を.envファイルに記入する

編集ファイル:.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=1789c92fab567b
MAIL_PASSWORD=b93f92jg2e71ee
MAIL_ENCRYPTION=null

実際に会員登録して、メール送信の動作確認をしてみる


実際に会員登録してメールを送るとこんな感じになります。

エラーが発生した場合:Expected response code 250 but got code “530”

Swift_TransportException in AbstractSmtpTransport.php line 383:
Expected response code 250 but got code “530”, with message “530 5.7.1 Authentication required

なんじゃこりゃ。
よく分からないけど、キャッシュクリアしたらなおりました。下記のとおり。

$php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

送信元(From)とapp.nameを変更する

編集ファイル:/config/mail.php

‘from’ => [
‘address’ => env(‘MAIL_FROM_ADDRESS’, ‘manabu@example.com’),
‘name’ => env(‘MAIL_FROM_NAME’, ‘Manabu’),
],

編集ファイル:.env

APP_NAME=Manabu_app

※うまく動かない場合はキャッシュクリアすれば多分直ります。

$php artisan config:cache

メール本文内でユーザー情報を扱えるように設定する

編集ファイル:/app/Http/Controllers/RegistrationController.php

\Mail::to($user)->send(new Welcome($user));

次に、/app/Mail/Welcome.phpを下記のように編集します。

use App\User;
class Welcome extends Mailable
{
	use Queueable, SerializesModels;

	public $user; //ここを追加
	public function __construct(User $user) //ここを追加
	{
		$this->user = $user; //ここを追加
	}
	public function build()
	{
		return $this->markdown('emails.welcome');
	}
}

メール本文内に$user情報を挿入する

編集ファイル:/resources/views/emails/welcome.blade.php

@component('mail::message')
# Introduction

こんにちは、{{ $user->name }}さん。
The body of your message.


こんな感じ。完了です!

補足:メールのタイトル(Subject)を変更する方法

編集ファイル:/app/Mail/Welcome.php

public function build()
{
	return $this->markdown('emails.welcome')
	->subject('ここがタイトルです');
}

人気記事無料あり:エンジニアの僕がおすすめするプログラミングスクール3社