チュートリアル 初級

メール送信(ログに出力)

2018/02/09

WEBサイトの構築で最初に作るであろうプログラムは「お問い合わせ」フォームになるかと思います。

今回は Laravel でお問い合わせフォームを作ってみます。

通常はSMTPサーバを設定するのですが、第1ステップではメールを送信しません。

メール内容をLOGに出力するやり方をします。

ローカルで開発中にデバッグしたい時はこちらがおすすめです。

 

メールの設定について

.envファイル

Laravelでは環境ごとに変わる情報(DBのログイン名とかパスワードとか)を .envファイル に記載します。

メールの設定内容もこの .envファイル に記載します。

デフォルトではメールの設定は以下のようになります。

:
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
【 解説 】
.envファイル は開発環境やステージング環境、本番環境などで変更したい情報をまとめておくファイルです。
.envファイルをそれぞれのサーバーに置くことで、環境による違いを気にしなくてすみます。
gitを使っている場合は、.envファイルを .gitignoreファイルに追加して、管理対象から外します。

 

config/mail.phpについて

.envファイルに記述したメールの設定値は config/mail.php で読み込まれます。

:
return [
  // Mail Driver
  'driver' => env('MAIL_DRIVER', 'smtp'),

  // SMTP Host Address
  'host' => env('MAIL_HOST', 'smtp.mailgun.org'),

  // SMTP Host Port
  'port' => env('MAIL_PORT', 587),
:
];

例えばMail Driverを見るとenvメソッドの第1引数にMAIL_DRIVERが指定されています。

このMAIL_DRIVERが .envファイル で設定した値(smtp)になります。

なお、第二引数はenvファイルで設定されなかった場合のデフォルト値(smtp)になります。

 

Mailファサード

メッセージを送るにはMailファサードのsendメソッドを使います。

sendメソッドは3つの引数をとります。

第1引数はメールの内容を含んでいるビューの名前(email.welcome)

第2引数はビューに渡すデータの配列($data)

第3引数は受信者や主題 ※クロ―ジャーで記述

function($message) {
  $message->to('someone@example.com')->subject('Welcome');
  });

上記のケースをもとめると以下のようになります。

Mail::send('emails.welcome', $data, function($message) {
  $message->to('someone@example.com')->subject('Welcome');
  });
【解説】
通常、sendメソッドの第1引数には配列を指定します。

例)HTMLメールと平文テキストメールを送信

Mail::send(['html.view', 'text.view'], $data, $callback);

例)平文テキストメールのみ送信

Mail::send(['text' => 'view'], $data, $callback);

 

チュートリアル

Laravelでお問い合わせフォームを作ります。

実際にメール送信するのではなく、ログに出力します。

 

手順

1)フォーム(入力画面から確認画面)の作成
2)メールの設定(.envファイル)
3)コントローラの編集
  1.コントローラの処理
  2.通知メール関数
4)メール文章の作成
5)動作確認

 

1)フォーム(入力画面から確認画面)の作成

何度かチュートリアルで制作しているので、この項目は省略します。

わからない方は以下のページを参照してください。

フォーム(入力画面から確認画面)の作成

 

2)メールの設定(.envファイル)

送信内容をログに出力する場合は.envファイルの MAIL_DRIVER の値に log を設定します。

デフォルトでは MAIL_DRIVER の設定は SMTP になっています。

MAIL_DRIVER=log
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
【解説】
Laravelのログファイルに関してはこちら
Laravelでのデバッグのやり方について(Logファサード編)

 

3)コントローラの作成

入力フォーム

  public function getIndex()
  {
  return view('mail.index');
  }

 
確認画面

  public function confirm(\App\Http\Requests\MailDemoRequest $request)
  {
  $data = $request->all();
  return view('mail.confirm')->with($data);
  }

 
完了画面

use Mail;
:
  public function finish(\App\Http\Requests\MailDemoRequest $request)
  {
  $data = $request->all();
  Mail::send('mail.temp', $data, function($message) use($data){
  $message->to($data["email"])->subject($data["title"]);
  });
  return view('mail.finish');
  }

Laravelではメールのメッセージをビュー(mail.temp)として保存します。

 

4)メール文章の作成

お問い合せいただき誠にありがとうございます。
お問い合わせいただいた内容は下記のとおりです。
ご確認ください。

------------------------------------------------------------
【件名】:{{$title}}
【メールアドレス】:{{$email}}
【ご質問内容】:
{{$body}}
------------------------------------------------------------

もし間違いがある場合は文末の連絡先まで、ご一報ください。
よろしくお願いいたします。

< Laravel学習帳 >

 

5)動作確認

入力画面

 
確認画面

 
完了画面

 
ログファイル

ログファイルに上記のように出力できていればOKです。

メール送信(ログに出力)に関しては以上です。

本庄マサノリ

仕事でLaravelを使っています。気づいたことや新しい発見など情報を発信していきます。メールはこちら

 

-チュートリアル, 初級