Contact template

Give visitors a way to reach you without exposing your email

Import a Laravel contact form for Filament, store each message in your application, notify your team by email, and manage public-form spam.

Open this template in the demo builder 6 fields, 4 required. Free demo account, no card.

Updated

This Laravel contact form gives visitors a direct way to send a message without publishing an inbox address. Import it into FilaForms, then use the field table below to collect messages inside the application you run.

The imported template creates a submission in your application's database when a visitor sends the form. Laravel can route that source record into a support, partnership, or sales workflow, while your team keeps the original message available for review.

Use the field table below to keep the first contact useful and short. The email creates a reply path. The subject helps triage. The message provides the context your team needs before deciding who should answer.

Zuko Analytics, 2025 reports that only 38% of users who start a contact form go on to submit it. Keep the initial request focused on the information that changes the response, rather than collecting facts without a clear next action.

FilaForms is a Laravel form builder for Filament when form data belongs with the rest of your application records. Your team can adjust the visual form in the panel, while Laravel owns what happens after a visitor submits it.

Fields in this template (6 fields, 4 required)

Field types used: Text, Email, Phone Number, Textarea. Every field is editable in the builder after import.

Contact Information

Field Type Required Validation
Full Name full_name Text Yes required
Email Address email Email Yes required
Phone Number phone Phone Number No none
Company company Text No none
Subject subject Text Yes required
Message message Textarea Yes required

Form settings the template ships with

Submit button
Send message
After submit
show message
Success message
Thanks for getting in touch. We reply to every message within one working day.
Admin email subject
New contact form message
Auto-response subject
We received your message

Route messages, notify your team, and protect the public form

Each message remains a FilaForms submission in your application's database. That record is the intake source, not merely the trigger for an email. A teammate can inspect it when a reply needs context, and your application can attach it to a customer, conversation, or lead record later.

Give one person or queue ownership of incoming messages. A general mailbox can work for a small team. A support queue may need subject-based routing. A sales queue may need a lead record before the first response. Keep the submission identifier on every derived record so the original message stays traceable.

Email notification should alert the team without becoming the only copy of a contact message. The listener below reads this template's email, subject, and message codes. It sends those values to the configured contact recipient, then leaves the submission available in FilaForms.

Set mail.contact_recipient to the inbox that owns contact messages. The fallback uses the configured sender address, which keeps the listener runnable before you add a separate recipient setting. Save the listener as app/Listeners/EmailContactFormSubmission.php. Laravel 12 discovers listeners in that directory automatically.

<?php

declare(strict_types=1);

namespace App\Listeners;

use FilaForms\Core\Events\FormSubmitted;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Mail;

final class EmailContactFormSubmission
{
    public function handle(FormSubmitted $event): void
    {
        $data = $event->submission->data;

        $email = $data['email'] ?? null;
        $subject = $data['subject'] ?? null;
        $message = $data['message'] ?? null;

        Mail::raw(
            implode(PHP_EOL, [
                "Form ID: {$event->form->getKey()}",
                "Submission ID: {$event->submission->getKey()}",
                "From: {$email}",
                "Subject: {$subject}",
                '',
                (string) $message,
            ]),
            function (Message $mail) use ($email, $subject): void {
                $mail->to(config('mail.contact_recipient', config('mail.from.address')))
                    ->subject((string) $subject);

                if (is_string($email) && $email !== '') {
                    $mail->replyTo($email);
                }
            },
        );
    }
}

Replace the recipient with the inbox or routing process your team already uses. Keep the reply-to value when email is present. It lets a teammate answer the visitor directly from the notification instead of copying an address into a new message.

Public contact forms attract automated submissions. FilaForms ships a honeypot check for public forms. This template has no CAPTCHA integration, so a contact form under heavy bot traffic still needs a CAPTCHA or rate limiting added in the application. Measure unwanted submissions before adding friction for real visitors.

Use a sales-qualified variant when a sales representative must call or assess a lead before replying. Make phone required when a call is part of the expected next step. Keep that question optional for general support or partnership messages, because a forced phone number can discourage people who only need an email reply.

For a personal-site version, drop company when it does not affect the response. An independent consultant may only need a name, email, subject, and message. Removing company reduces the work for visitors and keeps the review queue focused on the message itself.

The field table below provides the initial structure. Change labels and routing to match the people who answer submissions. Review the FilaForms features for Laravel and Filament if your contact flow needs conditional questions, multi-step collection, or additional notification handling.

Use this template in your own application

With FilaForms installed, one call creates the form with every field, rule, and setting listed above. Then edit it in the builder.

use FilaForms\Core\Support\FormTemplates;

$form = FormTemplates::createFormFromTemplate('contact-form');
Template schema (JSON)
{
    "name": "Contact Form",
    "description": "Simple contact form with name, email, subject, and message",
    "icon": "heroicon-o-envelope",
    "category": "Contact",
    "popularity": "Very High",
    "experience": {
        "success_message": "<p>Thanks for getting in touch. We reply to every message within one working day.</p>",
        "post_submit_action": "show_message",
        "submit_button_text": "Send message"
    },
    "notification_config": {
        "enabled": true,
        "channels": [
            "email"
        ],
        "admin_emails": [
            "hello@example.com"
        ],
        "custom_admin_subject": true,
        "admin_subject_template": "New contact form message",
        "send_auto_response": true,
        "auto_response_email_field": "email",
        "auto_response_subject": "We received your message",
        "auto_response_message": "<p>Thanks for getting in touch. Your message is with our team and we reply to everything within one working day.</p>"
    },
    "sections": [
        {
            "name": "Contact Information",
            "description": "Your contact details",
            "fields": [
                {
                    "label": "Full Name",
                    "type": "text",
                    "code": "full_name",
                    "required": true,
                    "placeholder": "Enter your full name",
                    "width": "50"
                },
                {
                    "label": "Email Address",
                    "type": "email",
                    "code": "email",
                    "required": true,
                    "placeholder": "your@email.com",
                    "width": "50"
                },
                {
                    "label": "Phone Number",
                    "type": "phone",
                    "code": "phone",
                    "required": false,
                    "placeholder": "(555) 123-4567",
                    "width": "50"
                },
                {
                    "label": "Company",
                    "type": "text",
                    "code": "company",
                    "required": false,
                    "placeholder": "Company name",
                    "width": "50"
                },
                {
                    "label": "Subject",
                    "type": "text",
                    "code": "subject",
                    "required": true,
                    "placeholder": "What is this about?",
                    "width": "100"
                },
                {
                    "label": "Message",
                    "type": "textarea",
                    "code": "message",
                    "required": true,
                    "placeholder": "Tell us how we can help...",
                    "width": "100"
                }
            ]
        }
    ]
}

Frequently asked questions

Where do Laravel contact form submissions go?
FilaForms stores every contact message as a submission in your application's database, where Laravel can route it into your support or sales workflow.
How can I email my team after a contact form submission?
Listen for FilaForms\Core\Events\FormSubmitted and send an email using the email, subject, and message values from the submission data.
Does this contact form prevent spam?
FilaForms ships a honeypot check for public forms, but it has no CAPTCHA integration, so heavy bot traffic needs a CAPTCHA or rate limiting in the application.
Can I use this template for sales leads?
Yes. Make phone required for a sales-qualified version, or drop company for a personal-site version.

More templates