質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1810閲覧

Laravel5で別々のメールを2人に送る方法を教えてください

qwe001

総合スコア133

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2016/10/04 07:26

編集2016/10/04 07:44

現在ユーザーの入力した情報をメールでユーザーと管理者それぞれに送る機能を実装しようとしています。

ユーザーにはサンクスメールを、管理者には入力した内容一式をメールで送信します。
こちらどちらか片方だけの時には正しく送信できるのですが、両方一度にとなるとうまく動作しません。
以下は記述しているコードです。

app/Http/Controllers/TestController.php

php

1 2class TestController extends Controller 3{ 4 public function index(){ 5 return view('test.index'); 6 } 7 8 public function store(Request $request){ 9 $validator = Validator::make($request->all(), [ 10 'first_name' => 'required', 11 'email' => 'required|email|confirmed', 12 'body' => 'required', 13 ]); 14 15 if ($validator->fails()) { 16 return redirect() 17 ->back() 18 ->withErrors($validator) 19 ->withInput(); 20 } 21 else { 22 $data = $request -> all(); 23 $request -> session() -> put($data); 24 25 return view('test.confirm', compact("data")); 26 } 27 } 28 29 public function confirm(Request $request){ 30 $data = $request -> all(); 31 $request -> session() -> put($data); 32 33 return view('test.confirm', compact("data")); 34 } 35 36 public function complete(){ 37 $data = session() -> all(); 38 39 $this -> sendMailToUser(); 40 $this -> sendMailToAdmin(); 41 42 return view('test.complete'); 43 } 44 45 public function sendMailToUser(Request $request){ 46 $data = session() -> all(); 47 48 Mail::send(['text' => 'test.mailtouser'], $data, function($message) use($data){ 49 $message -> to($data['email']) -> subject("お問い合わせを受け付けました"); 50 }); 51 } 52 53 public function sendMailToAdmin(Request $request){ 54 $data = session() -> all(); 55 56 Mail::send(['text' => 'test.mailtoadmin'], $data, function($message) use($data){ 57 $message -> to('admin@example.com') -> subject("お問い合わせ受付"); 58 }); 59 } 60} 61

route.php ( 当方 Laravel5.3 のため、実際は routes/web.php )

php

1 2Route::resource('/test', 'TestController', ['only' => ['index', 'store']]); 3 4Route::get('/test/confirm', function () { 5 return view('test.confirm'); 6}); 7 8Route::get('/test/complete', function () { 9 return view('test.complete'); 10}); 11 12Route::post('/test/complete','TestController@sendMailToUser'); 13Route::post('/test/complete','TestController@sendMailToAdmin'); 14

ユーザーの入力内容を一旦セッションに記憶した後、
確認画面で内容を表示、そこで送信ボタンを押すと
セッションの内容を mailtoadmin.blade.php でまとめてメールで管理者に送信、
その後にユーザーに mailtouser.blade.php に書いた平文メールを送った後、
完了ページに遷移するという流れです。

このうち、ユーザーにメールを送る、という部分が実行できておりません。管理者には送信できています。
どの部分を修正すると二人に送信できますでしょうか。
ご教授よろしくお願いいたします。

追記

次のようにすることで二人に送ることができるようにはなりましたが、記述として正しくないような気がします。。
もっと良い書き方はございますでしょうか。

php

1 2 public function sendMail(Request $request){ 3 $data = session() -> all(); 4 5 Mail::send(['text' => 'test.mailtouser'], $data, function($message) use($data){ 6 $message -> to($data['email']) -> subject("お問い合わせを受け付けました"); 7 }); 8 9 Mail::send(['text' => 'test.mailtoadmin'], $data, function($message) use($data){ 10 $message -> to('admin@example.com') -> subject("お問い合わせ受付"); 11 }); 12 } 13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

少し気になったのはルートで/test/completeに対して2つコントローラーが設定されている点ですかね。この設定自体無理だった気がします。ルートは下に書いたものが優先で行われるので、結果として管理者側に送信されたのかと。一つのコントローラー内にまとめてみたらどうでしょうか?

【追記】
追記読みました。その書き方で特におかしい点は見当たらないので大丈夫だと思いますよ。むしろコントローラー分けてるほうが不自然に感じます。

投稿2016/10/04 07:53

編集2016/10/04 07:59
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwe001

2016/10/04 08:11 編集

返信ありがとうございます。コントローラを2つに分けていたことに特に深い理由はありません。強いて言えば私の勉強不足が原因です。。記載のやり方で問題ないとのこと、確認ありがとうございます。安心しました。また何かありましたらよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問