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

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

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

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

PHP

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

Q&A

解決済

1回答

1286閲覧

Laravel お問い合わせ送信完了メールの記述について

yuchet20

総合スコア0

Laravel

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

PHP

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

0グッド

0クリップ

投稿2020/07/29 04:00

前提・実現したいこと

Laravel(6.0)でお問い合わせフォームを作り、送信が完了したら自動送信メールが飛ぶ機能を実装中です。
具体的には下記のような形でファイルを作っています。

①contactフォルダ->index.blade.php(お問い合わせ入力画面)
②contactフォルダ->confirm.blade.php(確認画面)
③contactフォルダ->complete.blade.php(送信完了画面)
④ContactController.php
⑤ContactSendmail.php
⑥mail.blade.php
.envのメール設定、gmailの2段階認証ON、アプリパスワード取得もOK

発生している問題・エラーメッセージ

入力画面での入力→確認画面への遷移までは何とか辿り着いたのですが、最後に確認画面で送信ボタンを押すと下記のエラーが出てしまいます。

----エラー文---- nl2br() expects parameter 1 to be string, object given.... ----該当箇所---- <mail.blade.php内> ■ご質問・お問い合わせ内容<br> {!! nl2br($message) !!}<br>

該当のソースコード

PHP

1///confirm.blade.php(確認画面) 2 3@extends('layouts.base') 4@section('content') 5<form action="{{route('contact.complete')}}" method="post" class="form"> 6 @csrf 7 <p class="form_req"> 8<span style="color: red;">&#8727;</span>」の項目は入力必須の項目です。 9 </p> 10 <table class="form_body"> 11 <tr class="formLine"> 12 <th class="formTitle">貴社名(法人の方のみ)</th> 13 <td class="formContent"> 14 <div> 15 {{ $contact['company'] }} 16 <input type="hidden" name="company" value="{{ $contact["company"] }}"> 17 </div> 18 </td> 19 </tr> 20 <tr class="formLine"> 21 <th class="formTitle">お名前(ご担当者様)<span style="color: red";>*</span></th> 22 <td class="formContent"> 23 <div> 24 {{ $contact['name'] }} 25 <input type="hidden" name="name" value="{{ $contact["name"] }}"> 26 </div> 27 </td> 28 </tr> 29 <tr class="formLine"> 30 <th class="formTitle">電話番号</th> 31 <td class="formContent"> 32 <div class="tel"> 33 {{ $contact['tel'] }} 34 <input type="hidden" name="tel" value="{{ $contact["tel"] }}"> 35 </div> 36 </td> 37 </tr> 38 <tr class="formLine"> 39 <th class="formTitle">メールアドレス<span style="color: red";>*</span></th> 40 <td class="formContent"> 41 <div> 42 {{ $contact['email'] }} 43 <input type="hidden" name="email" value="{{ $contact["email"] }}"> 44 </div> 45 </td> 46 </tr> 47 <tr class="formLine"> 48 <th class="formTitle">ご質問・ご要望内容<span style="color: red";>*</span></th> 49 <td class="formContent"> 50 <div> 51 {!! nl2br(e($contact['message'])) !!} 52 <input type="hidden" name="message" value="{{ $contact["message"] }}"> 53 </div> 54 </td> 55 </tr> 56 </table> 57 <input name="action" type="submit" value="入力画面に戻る" class="form_btn"> 58 <input name="action" type="submit" value="送信する" class="form_btn"> 59</form> 60@endsection

PHP

1///ContactController 2 3<?php 4 5namespace App\Http\Controllers; 6 7use Illuminate\Http\Request; 8use App\Mail\ContactSendmail; 9 10class ContactController extends Controller 11{ 12 private $formItems = ["company", "name", "tel", "email", "message"]; 13 14 public function index() { 15 return view('contact.index'); 16 } 17 18 public function confirm(Request $request) { 19 20 $this->validate($request, [ 21 'name' => 'required', 22 'email' => 'required|email', 23 'message' => 'required' 24 ]); 25 26 $contact = $request->all(); 27 return view('contact.confirm', compact('contact')); 28 } 29 30 public function complete(Request $request) { 31 $this->validate($request, [ 32 'name' => 'required', 33 'email' => 'required|email', 34 'message' => 'required' 35 ]); 36 37 $action = $request->input('action'); 38 $inputs = $request->except('action'); 39 40 41 if($action === '入力画面に戻る'){ 42 return redirect()->route('contact.index')->withInput($inputs); 43 } else { 44 45 46 \Mail::to($inputs['email'])->send(new ContactSendmail($inputs)); 47 48 $request->session()->regenerateToken(); 49 50 return view('contact.complete'); 51 } 52 } 53}

PHP

1///ContactSendmail.php 2 3<?php 4 5namespace App\Mail; 6 7use Illuminate\Bus\Queueable; 8use Illuminate\Contracts\Queue\ShouldQueue; 9use Illuminate\Mail\Mailable; 10use Illuminate\Queue\SerializesModels; 11 12class ContactSendmail extends Mailable 13{ 14 use Queueable, SerializesModels; 15 16 private $company; 17 private $name; 18 private $tel; 19 private $email; 20 private $message; 21 /** 22 * Create a new message instance. 23 * 24 * @return void 25 */ 26 27 public function __construct($inputs) 28 { 29 $this->company = $inputs['company']; 30 $this->name = $inputs['name']; 31 $this->tel = $inputs['tel']; 32 $this->email = $inputs['email']; 33 $this->message = $inputs['message']; 34 } 35 36 /** 37 * Build the message. 38 * 39 * @return $this 40 */ 41 public function build() 42 { 43 return $this 44 ->from('myaddress@gmail.com') 45 ->subject('自動送信メール') 46 ->view('contact.mail') 47 ->with([ 48 'company' => $this->company, 49 'name' => $this->name, 50 'tel' => $this->tel, 51 'email' => $this->email, 52 'message' => $this->message, 53 ]); 54 } 55}

PHP

1///mail.blade.php 2 3お問い合わせ内容を受け付けました。<br> 4<br> 5■貴社名<br> 6{!! $company !!}<br> 7<br> 8■お名前(法人の方はご担当者様)<br> 9{!! $name !!}<br> 10<br> 11■電話番号<br> 12{!! $tel !!}<br> 13<br> 14■メールアドレス<br> 15{!! $email !!}<br> 16<br> 17■ご質問・お問い合わせ内容<br> 18{!! nl2br($message) !!}<br>

試したこと

一旦、下記の記述に変えてmessageを文字列とすることで、メールを送る機能自体が動くか試してみました。

<mail.blade.php内>
■ご質問・お問い合わせ内容<br>

{!! 'message' !!}<br>

結果、メールの送信に成功し、内容も貴社名〜メールアドレスの項目までは入力した値で記載されており、ご質問・お問い合わせ内容の項目もmessageと文字列で受け取れていました。

$messageにユーザーの入力した内容(文字列)を入れるところさえできれば、解決すると思います。
PHP、Laravel初心者のため初歩的なことになるかもしれませんが、ご教示いただけるとありがたいです。

補足情報(FW/ツールのバージョンなど)

nl2brの引数に文字列が入っていないと今回のようなエラーが出るところまでは調べて分かったのですが、そこから先にうまく進めず、、、という状況です。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

自力で解決できました。
以下、修正したファイルです。

PHP

1///ContactSendmail.php 2 3<?php 4 5namespace App\Mail; 6 7use Illuminate\Bus\Queueable; 8use Illuminate\Contracts\Queue\ShouldQueue; 9use Illuminate\Mail\Mailable; 10use Illuminate\Queue\SerializesModels; 11 12class ContactSendmail extends Mailable 13{ 14 use Queueable, SerializesModels; 15 16 private $company; 17 private $name; 18 private $tel; 19 private $email; 20 private $message; 21 protected $inputs; 22 /** 23 * Create a new message instance. 24 * 25 * @return void 26 */ 27 28 public function __construct($inputs) 29 { 30 $this->inputs = $inputs; 31 } 32 33 /** 34 * Build the message. 35 * 36 * @return $this 37 */ 38 public function build() 39 { 40 return $this 41 ->from('myaddress@gmail.com') 42 ->subject('自動送信メール') 43 ->view('contact.mail') 44 ->with([ 45 'inputs' => $this->inputs, 46 ]); 47 } 48}

PHP

1お問い合わせ内容を受け付けました。<br> 2<br> 3■貴社名<br> 4{{ $inputs['company'] }}<br> 5<br> 6■お名前(法人の方はご担当者様)<br> 7{{ $inputs['name'] }}<br> 8<br> 9■電話番号<br> 10{{ $inputs['tel'] }}<br> 11<br> 12■メールアドレス<br> 13{{ $inputs['email'] }}<br> 14<br> 15■ご質問・お問い合わせ内容<br> 16<?php echo nl2br(htmlspecialchars($inputs['message'])); ?><br>

投稿2020/07/29 10:26

yuchet20

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問