Laravelでお問い合わせフォームを作成②
はじめに
laravelではメールファサードを使用してメールを送信出来ますが、Mailableクラスを使用して送信元やテンプレートなどをkeyごとにわかりやすく設定することが出来ます。
手順1: Mailableクラスの作成
まずは以下のコマンドでMailableクラスを作成します。
手順2:Mailableクラスの編集
まず、onstructの引数に【public array $form_data】を追加します。ここに書くことで入力フォームから受け取ったパラメータを次に遷移させるブレードに渡すことが出来ます。
envelopeメソッドでは送信元の情報を設定します。【config('mail.email_admin');】の記述でenvファイルに設定した管理者のメールアドレスをconfigファイルを介して取得しています。
subjectのkeyには送信元から送信する際のメールタイトルを追加します。わかりやすいように自動送信メールとしました。
contentメソッドのviewのkeyはテンプレートとして使用したい管理者用のbladeファイルを追加します。お問い合わせがあった場合に管理者に送信する際のメールのテンプレートを記述することになります。
管理者用に送る際のメールテンプレート
views/mail/admin.blade.php
- 様より下記の内容のお問い合わせがありました
- ==============================
- お問い合わせ内容
- ==============================
- ■お名前:
- ■メールアドレス:
- ■お問い合わせ内容:
ユーザーと管理者でメールのテンプレートを分けたい場合はユーザー用のMailableクラスを作成します。(テンプレートを共通で使いたい場合は不要。)
- php artisan make:mail FormUserSendmail
app/Mail/FormUserMail.php
- <?php
- namespace App\Mail;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Mail\Mailable;
- use Illuminate\Mail\Mailables\Content;
- use Illuminate\Mail\Mailables\Envelope;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Mail\Mailables\Address;
- class FormUserMail extends Mailable
- {
- use Queueable, SerializesModels;
- /**
- * Create a new message instance.
- *
- * @return void
- */
- public function __construct(public array $form_data)
- {
- //
- }
- /**
- * Get the message envelope.
- *
- * @return \Illuminate\Mail\Mailables\Envelope
- */
- public function envelope()
- {
- $email_admin = config('mail.email_admin');
- $from = new Address($email_admin, 'フォームAPP');
- $subject = '【フォームAPP】お問合せ有難うございます';
- return new Envelope(
- from: $from,
- subject: $subject,
- );
- }
- /**
- * Get the message content definition.
- *
- * @return \Illuminate\Mail\Mailables\Content
- */
- public function content()
- {
- return new Content(
- view: 'mail.user',
- );
- }
- /**
- * Get the attachments for the message.
- *
- * @return array
- */
- public function attachments()
- {
- return [];
- }
- }
Views/mail/user.blade.php
- こちらの内容で受け付けました。
- ==============================<br>
- お問い合わせ内容<br>
- ==============================<br>
- ■お名前:
- ■メールアドレス:
- ■お問い合わせ内容:
手順3: コントローラー側でメール送信するロジックを追加
メール送信する流れとしては、入力ページで入力した後、確認ページへ遷移し、確認ページから送信ボタンを押すと、MailController.phpのsendメソッドが呼び出されます。
MailRequestでバリデーションが通れば、envファイルに定義している管理者用のメールアドレスをconfigから取得し、管理者宛メールの送り先にセットします。
メールファサードのsendメソッドを使用してメール送信しています。
第1引数に、テンプレートファイルのパスを指定し、第二引数に送信したい中身(フォームから受け取ったパラメータ)をセットしてメール送信しています。
Controllers/MailController.php
- /**
- * Display the login view.
- */
- public function send(MailRequest $request): View
- {
- $form_data = $request->validated();
- $email_admin = config('mail.email_admin');
- $email_user = $form_data['email'];
- // 管理者宛メール
- Mail::to($email_admin)->send( new FormAdminMail($form_data) );
- // ユーザー宛メール
- Mail::to($email_user)->send( new FormUserMail($form_data) );
-
- // 二重送信対策のためトークンを再発行
- $request->session()->regenerateToken();
-
- return view('mail.conmplete', ['contents' => $form_data]);
- }
あとは二重送信されないための処理を追加し、完了ページへ遷移させます。
その他1: サクラサーバーで設定したメールと連携する。
サクラサーバーの管理画面にログインし、メール一覧から作成ボタンを押してメールアカウントを作成する。
envファイルに以下のように設定する。
- MAIL_MAILER=smtp
- MAIL_HOST=サクラサーバーのホスト名
- MAIL_PORT=587
- MAIL_USERNAME=サクラサーバーの管理画面から作成したメールアドレス
- MAIL_PASSWORD="サクラサーバーで設定した”パスワード
- MAIL_ENCRYPTION=tls
- MAIL_FROM_ADDRESS=サクラサーバーの管理画面から作成したメールアドレス
- MAIL_FROM_NAME="${APP_NAME}"
これでお問い合わせフォームから入力した内容がサクラサーバーで設定したメールアドレス宛に送信出来るようになります。
参考記事:【超解説】Laravelでお問い合わせフォーム作成!Gmailで連携するには?
記事一覧に戻るプロフィールに戻る