2020/08/12
WEBサイトの構築で最初に作るであろうプログラムがメールフォーム。
Laravel5.2では Mail ファザードを利用して送信します。
今回は Laravel のMail ファザードを使ってお問い合わせフォームを作ってみます。
演習
今回は第一ステップとしてメール送信しません。
ログファイルに内容を書き込むやり方をします。
前提条件として「ルーティング」「コントローラ」といった基本的なことは理解しているものとします。
よくわからない方は以下をご参考ください。
手順
envファイルの設定
送信内容をログに出力する場合は.envファイルの MAIL_DRIVER の値に log を設定します。
# .env
MAIL_DRIVER = log
:
メール送信の為の提供ドライバ
Laravel のメール送信機能では、以下のドライバに対応しています。
- smtp
- SMTPサーバーから送信します。一般的な送信方法です。
- sendmail
- PHPのmail関数で送信します。
- mailgun
- Mailgun という API ベースのメース配信サービスから送信します。
- mandrill
- Mandrill という API ベースのメース配信サービスから送信します。
- mailtrap
- mailtrap という API ベースのメール配信サービスから送信します。
- ses
- AWS が提供する Amazon SES から送信するサービスです。
- log
- 送信は行われず、ログファイルに内容を書き込みます。今回はこれを使用します。
- array
- ロジックは通りますが、送信はされません。
Mailファサードの使用
メールを送るためには、Mailファサードのsendメソッドを使います。
- 第一引数にはメールの文章(※Bladeで作成)
- 第二引数にはメール文章に渡す配列
- 第三引数にはクロージャー(メールアドレスや件名を定義)
# 書式
Mail::send('メールの文章', 'ビューに渡す配列' , function($message){
$message->to('メールアドレス')->subject('件名');
});
メールの文章は Blade で作成します。
テキストメールのみ送信する場合
# テキストメール
Mail::send(array('text' => 'email.message'), 'ビューに渡す配列' , function($message){
$message->to('メールアドレス')->subject('件名');
});
第一引数はデフォルトではHTMLメールになります。
送信先が動的な場合はクロージャーに「use」を使います。
# 例:送信先メールアドレスが変数「$login_user_email」
Mail::send(array('text' => 'email.message'), 'ビューに渡す配列' , function($message) use ($login_user_email){
$message->to($login_user_email)->subject('件名');
});
TO 以外にも BCC を追加する場合
Mail::send(array('text' => 'email.message'), 'ビューに渡す配列' , function($message){
$message->to('test@test.com')->bcc('demo@test.com')->subject('件名');
});
ビューに配列を渡す場合
public function user_regist(Request $user){
Mail::send(array('text' => 'email.message'), ['user' => $user], function($message){
$message->to('test@test.com')->bcc('demo@test.com')->subject('件名');
});
配列を使ったメール本文は以下のようになります。
# message.blade.php
お名前:{{$user->name}}
住所:{{$user->address}}
年齢:{{$user->old}}
:
メール文章の作成
コントローラ
# リクエストを $dataArray に格納
# リクエストの中身 件名:$title メールアドレス:$email 内容:$body
$dataArray = $request->all();
# Mailファサード
Mail::send(array('text' => 'email.message'), $dataArray , function($message) use ($dataArray){
$message->to($dataArray["email"])->subject($dataArray["title"]);
});
メール文章(email.message.blade.php)
お問い合せいただき誠にありがとうございます。
お問い合わせいただいた内容は下記のとおりです。
ご確認ください。
------------------------------------------------------------
【件名】:{{$title}}
【メールアドレス】:{{$email}}
【ご質問内容】:
{{$body}}
------------------------------------------------------------
もし間違いがある場合は文末の連絡先まで、ご一報ください。
よろしくお願いいたします。
< Laravel学習帳 >
動作確認
入力画面
確認画面
完了画面
ログファイル
ログファイルに上記のように出力できていればOKです。
メール送信(ログに出力)に関しては以上です。
PHPフレームワーク Laravel入門 第2版
僕がはじめてLaravelを学習するために参考にしたサイトは、掌田津耶乃(しょうだつやの)さんの libro というサイトです。当時(2016年)、Laravel学習サイトの中でもこのサイトは群を抜いてわかりやすく説明されていたので、とても勉強になったのを覚えています。この本は掌田津耶乃さんが書いた本なので、わかりやすく解説されているだろうと kindle で購入しました。2020年8月の時点でいうと日本国内にて唯一の Laravel の良書と言っても良いかと思います。口コミでもLaravel本のロングセラー定番解説書として認知されています。当サイトではチュートリアル形式でLaravelを解説しているので、初心者の方はこの本とセットで学習されるといいと思います。しかし、かなりわかりやすく解説されているとはいえ、PHP中級者以上のスキルは必要です。PHP自体の知識が乏しい方は 独習PHP 第3版 をあわせて購入することをお勧めします。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。