カテゴリ: Laravel 更新日: 2025/12/18

Laravelでメール送信付きの問い合わせフォームを作る方法

Laravelでメール送信付きの問い合わせフォームを作る方法
Laravelでメール送信付きの問い合わせフォームを作る方法

先生と生徒の会話形式で理解しよう

生徒

「Laravelで問い合わせフォームを作って、送信するとメールも届くようにしたいです。」

先生

「それならLaravelのメール送信機能とフォームバリデーションを組み合わせると簡単に作れます。」

生徒

「フォームバリデーションって何ですか?」

先生

「入力されたデータが正しいかチェックする仕組みのことです。例えば必須項目が空欄でないか、メールアドレスが正しい形式かなどを確認します。」

1. メール送信用の設定

1. メール送信用の設定
1. メール送信用の設定

まずは.envファイルでメール送信の設定を行います。SMTPサーバーや送信元メールアドレスを指定します。


MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your_email@example.com
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your_email@example.com
MAIL_FROM_NAME="YourAppName"

この設定でLaravelがメールを送信できるようになります。

2. フォームの作成

2. フォームの作成
2. フォームの作成

Bladeテンプレートで問い合わせフォームを作ります。ユーザー名、メールアドレス、内容などの入力欄を設置します。


<form action="{{ route('contact.send') }}" method="POST">
    @csrf
    <input type="text" name="name" placeholder="お名前">
    <input type="email" name="email" placeholder="メールアドレス">
    <textarea name="message" placeholder="お問い合わせ内容"></textarea>
    <button type="submit">送信</button>
</form>

@csrfはフォームのセキュリティを守るためのトークンです。

3. バリデーションの設定

3. バリデーションの設定
3. バリデーションの設定

FormRequestを使うと、フォームの入力チェックを簡単にまとめられます。artisanコマンドで作成します。


php artisan make:request ContactFormRequest

作成されたContactFormRequestrules()メソッドにルールを定義します。


public function rules()
{
    return [
        'name' => 'required|string|max:50',
        'email' => 'required|email',
        'message' => 'required|string|max:1000',
    ];
}

4. メール送信の設定

4. メール送信の設定
4. メール送信の設定

LaravelのMailファサードを使ってメールを送信します。Mailableクラスを作成すると便利です。


php artisan make:mail ContactMail

Mailableクラスでメールの件名や本文を設定します。


public $contact;

public function __construct($contact)
{
    $this->contact = $contact;
}

public function build()
{
    return $this->subject('お問い合わせがありました')
                ->view('emails.contact');
}

5. コントローラでフォーム送信処理

5. コントローラでフォーム送信処理
5. コントローラでフォーム送信処理

コントローラでFormRequestを受け取り、バリデーション済みデータを取得し、メール送信を行います。


use App\Http\Requests\ContactFormRequest;
use App\Mail\ContactMail;
use Illuminate\Support\Facades\Mail;

public function send(ContactFormRequest $request)
{
    $data = $request->validated();
    Mail::to('admin@example.com')->send(new ContactMail($data));

    return redirect()->back()->with('success', 'お問い合わせを送信しました');
}

送信後はセッションにメッセージを保存し、フォーム画面に表示できます。

6. Bladeでエラーメッセージと完了メッセージ表示

6. Bladeでエラーメッセージと完了メッセージ表示
6. Bladeでエラーメッセージと完了メッセージ表示

バリデーションエラーや送信完了メッセージをBladeで表示します。


@if(session('success'))
    <div class="alert alert-success">{{ session('success') }}</div>
@endif

@foreach($errors->all() as $error)
    <div class="alert alert-danger">{{ $error }}</div>
@endforeach

7. ベストプラクティス

7. ベストプラクティス
7. ベストプラクティス
  • FormRequestを使ってバリデーションを分離し、コントローラをシンプルに保つ
  • メール送信はMailableクラスで管理して再利用性を高める
  • 送信後のリダイレクトとセッションメッセージでユーザーにフィードバックを提供する
  • メール送信設定は.envで管理し、開発環境と本番環境を分ける
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.7
Java&Spring記事人気No7
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド