Jyothibabu Nanipini
Jyothibabu Nanipini

Reputation: 29

Send email and get reply in laravel form

I'm succeed to send mail from contact form, and now my requirement is to get automated success reply to the users input email address when submitting the form. please help me on this

ContactUsController

<?php

  namespace App\Http\Controllers;

  use Illuminate\Http\Request;
  use Illuminate\Support\Facades\Mail;
  use App\Mail\ContactUs;

  class ContactUsController extends Controller
  {
    function index()
    {
      return view('home/contactus');
    }

    function send(Request $request)
    {
      $this->validate($request,[
        'name' => 'required',
        'email' => 'required|email',
        'subject' => 'required',
        'message' => 'required'
      ]);

      $data = array(
                'name' => $request->name,
                'email' => $request->email,
                'subject' => $request->subject,
                'message' => $request->message
            );

      \Mail::to('[email protected]')->send(new ContactUs($data));
      return back()->with('success', 'Thanks for contacting us! We will get back to you soon.');
    }   
  }

ContactUs

<?php

  namespace App\Mail;

  use Illuminate\Bus\Queueable;
  use Illuminate\Mail\Mailable;
  use Illuminate\Queue\SerializesModels;
  use Illuminate\Contracts\Queue\ShouldQueue;

  class ContactUs extends Mailable
  {
    use Queueable, SerializesModels;
    public $data;

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

    public function build()
    {
      return $this->from('[email protected]')
                  ->subject('Customer Feedback')
                  ->view('dynamic_email_template')
                  ->with('data', $this->data);
    }
  }

Form

<div class="form">

  <h4>Send us a message</h4>
  @if (count($errors) > 0)
  <div class="alert alert-danger">
    <button type="button" class="close" data- dismiss="alert">×</button>
    <ul>
      @foreach ($errors->all() as $error)
      <li>{{ $error }}</li>
      @endforeach
    </ul>
  </div>
  @endif 
  @if ($message = Session::get('success'))
  <div class="alert alert-success alert-block">
    <button type="button" class="close" data- dismiss="alert">×</button>
    <strong>{{ $message }}</strong>
  </div>
  @endif

  <form method="post" action="{{url('contactus/send')}}" autocomplete="off">
    {{ csrf_field() }}
    <div class="form-group">
      <input type="text" name="name" for="name" class="form-control" id="name" placeholder="Your Name" data-rule="minlen:4" data-msg="Please enter at least 4 chars" />
      <div class="validation"></div>
    </div>
    <div class="form-group">
      <input type="email" class="form-control" name="email" for="email" id="email" placeholder="Your Email" data-rule="email" data-msg="Please enter a valid email" />
      <div class="validation"></div>
    </div>
    <div class="form-group">
      <input type="text" class="form-control" name="subject" for="subject" id="subject" placeholder="Subject" data-rule="minlen:4" data-msg="Please enter at least 8 chars of subject" />
      <div class="validation"></div>
    </div>
    <div class="form-group">
      <textarea class="form-control" name="message" for="message" rows="5" data-rule="required" data-msg="Please write something for us" placeholder="Message"></textarea>
      <div class="validation"></div>
    </div>

    <div class="text-center">
      <button type="submit" name="send" title="Send Message">Send Message</button>
    </div>
  </form>
</div>

dynamic_email_template

<p>Hi, This is {{ $data['name'] }} "{{ $data['email'] }}"</p> </br>

<p>{{ $data['subject'] }}</p> </br>
<p>I have some query like "{{ $data['message'] }}".</p> </br>
<p>It would be appriciative, if you gone through this feedback.</p>

Upvotes: 1

Views: 3167

Answers (1)

SenilShah
SenilShah

Reputation: 146

You need to create email template same like your view file, lets say contact_us_email.blade.php. In this file add this content

contact_us_email.blade.php

<html>
    <body>
        <h2>Hi, This is {{ $data['name'] }} "{{ $data['email'] }}"</h2><br>
        <p>Subject: {{ $data['subject'] }}</p> <br>
        <p>I have some query like <b>"{{ $data['message'] }}"</b>. <br>
        <p>It would be appriciative, if you gone through this feedback.</p>
    </body>
</html>

NOTE: Add css or styling according to your need. this is basic html

Edit: To send confirmation email to user

For success confirmation to user, you can create another email template like contact_us_thank_you_email.blade.php

<html>
    <body>
        <h2>Hello, {{ $data['name'] }} "{{ $data['email'] }}"</h2><br>
        <p>Thank You for your interest...blah blah blah</p> <br>
        <p>Our team will contact you soon</p> <br>
    </body>
</html>

Now in your ContactUsController, replace

\Mail::to('[email protected]')->send(new ContactUs($data));

with

Mail::send('contact_us_email', $data, function ($message) use ($data) {
    $message->from('[email protected]', 'xxx');
    $message->to('[email protected]')->subject($data['subject']);
});

Mail::send('contact_us_thank_you_email', $data, function ($message) use ($data) {
    $message->from('[email protected]', 'xxx');
    $message->to($data['email'])->subject('Thank you for the interest');
});

And I think you are good to go with this. I hope this is what you are asking for.

Upvotes: 4

Related Questions