質問編集履歴

1 修正

qwe001

qwe001 score 106

2016/10/04 16:44  投稿

Laravel5で別々のメールを2人に送る方法を教えてください
現在ユーザーの入力した情報をメールでユーザーと管理者それぞれに送る機能を実装しようとしています。
ユーザーにはサンクスメールを、管理者には入力した内容一式をメールで送信します。
こちらどちらか片方だけの時には正しく送信できるのですが、両方一度にとなるとうまく動作しません。
以下は記述しているコードです。
app/Http/Controllers/TestController.php
```php
class TestController extends Controller
{
   public function index(){
       return view('test.index');
   }
   public function store(Request $request){
       $validator = Validator::make($request->all(), [
           'first_name' => 'required',
           'email' => 'required|email|confirmed',
           'body' => 'required',
       ]);
       if ($validator->fails()) {
           return redirect()
                       ->back()
                       ->withErrors($validator)
                       ->withInput();
       }
       else {
           $data = $request -> all();
           $request -> session() -> put($data);
           return view('test.confirm', compact("data"));
       }
   }
   public function confirm(Request $request){
       $data = $request -> all();
       $request -> session() -> put($data);
       return view('test.confirm', compact("data"));
   }
   public function complete(){
       $data = session() -> all();
       $this -> sendMailToUser();
       $this -> sendMailToAdmin();
       return view('test.complete');
   }
   public function sendMailToUser(Request $request){
       $data = session() -> all();
       Mail::send(['text' => 'test.mailtouser'], $data, function($message) use($data){
           $message -> to($data['email']) -> subject("お問い合わせを受け付けました");
       });
   }
   public function sendMailToAdmin(Request $request){
       $data = session() -> all();
       Mail::send(['text' => 'test.mailtoadmin'], $data, function($message) use($data){
           $message -> to('admin@example.com') -> subject("お問い合わせ受付");
       });
   }
}
```
route.php ( 当方 Laravel5.3 のため、実際は routes/web.php )
```php
Route::resource('/test', 'TestController', ['only' => ['index', 'store']]);
Route::get('/test/confirm', function () {
   return view('test.confirm');
});
Route::get('/test/complete', function () {
   return view('test.complete');
});
Route::post('/test/complete','TestController@sendMailToUser');
Route::post('/test/complete','TestController@sendMailToAdmin');
```
ユーザーの入力内容を一旦セッションに記憶した後、
確認画面で内容を表示、そこで送信ボタンを押すと
セッションの内容を mailtoadmin.blade.php でまとめてメールで管理者に送信、
その後にユーザーに mailtouser.blade.php に書いた平文メールを送った後、
完了ページに遷移するという流れです。
このうち、ユーザーにメールを送る、という部分が実行できておりません。管理者には送信できています。
どの部分を修正すると二人に送信できますでしょうか。
ご教授よろしくお願いいたします。
ご教授よろしくお願いいたします。
追記
次のようにすることで二人に送ることができるようにはなりましたが、記述として正しくないような気がします。。
もっと良い書き方はございますでしょうか。
```php
   public function sendMail(Request $request){
       $data = session() -> all();
       Mail::send(['text' => 'test.mailtouser'], $data, function($message) use($data){
           $message -> to($data['email']) -> subject("お問い合わせを受け付けました");
       });
       Mail::send(['text' => 'test.mailtoadmin'], $data, function($message) use($data){
           $message -> to('admin@example.com') -> subject("お問い合わせ受付");
       });
   }
```
  • PHP

    36805 questions

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

  • CentOS

    4683 questions

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

  • Laravel

    4700 questions

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

  • Laravel 5

    3312 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る