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

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版 をあわせて購入することをお勧めします。

Amazonで詳細を見る

オススメ

 

本庄マサノリ

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

>> Twitter をフォローする

 

-チュートリアル, 初級