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

2019/05/08

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です。

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

本庄マサノリ

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

>> Twitter をフォローする

 

-チュートリアル, 初級