I want to send two email with different view page using Laravel

Viewed 362

I want to send two different emails with two different view blade files for submitting a single form.

My Controller

<?php

namespace App\Http\Controllers\Frontend;


use App\Mail\quickQuoteMail;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use App\sysmaster;

use App\Mail\contactEmail;
use Illuminate\Support\Facades\Mail;

class EmailController extends Controller
{
    public function contactEmail(Request $request)
    {

        $data = array(
          'ContactPerson'=>  $request->FullName,
          'ContactEmail'=>   $request->Email,
          'ContactNumber'=>   $request->Number,
          'ContactMessage'=> $request->Enquiry,
        );

        $token = $request->input('g-recaptcha-response');

        if(strlen($token)>0)
        {

            $quickQuoteemail = sysmaster::where('sysm_val_type', 'Contact_Email')->where('sysm_def_id', 'to')->first();

            $quickQuote = sysmaster::where('sysm_val_type', 'Contact_Email')->where('sysm_def_id', 'Cc')->first();

            if ($quickQuote->sysm_value!=null) {
                Mail::to($quickQuoteemail->sysm_value)->cc([$quickQuote->sysm_value, $request->Email])->send(new contactEmail($data));
            } else {
                Mail::to($quickQuoteemail->sysm_value)->cc($request->Email)->send(new contactEmail($data));
            }

            return redirect()->back()->with('message','Thank you for contact us.');
        }else{
            return redirect()->back()->with('message','Please make sure your not a robot');
        }




    }
}

Mail Function

<?php

namespace App\Mail;

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

class contactEmail extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $quickQuoteemail = sysmaster::where('sysm_val_type','Contact_Email')->where('sysm_def_id','from')->first();

        return $this->from($quickQuoteemail->sysm_value,$this->data['ContactPerson'])
            ->subject('Contact Us Enquiry')->view('email_contact_quote')->with('data',$this->data);
    }
}

I have another view blade file there (contact_email_company) How can I include that view with this function and this UI only will send for the company top one have to go for the only client please help how to do this.

1 Answers

You can use dynamic view name You can pass view name in $data Mail class

Change below in your controller function:

if ($quickQuote->sysm_value!=null) {
 $data['view_name'] = 'email_contact_quote';
 Mail::to($quickQuoteemail->sysm_value)->cc([$quickQuote->sysm_value, $request->Email])->send(new contactEmail($data));
}
else {
 $data['view_name'] = 'contact_email_company';
  Mail::to($quickQuoteemail->sysm_value)->cc($request->Email)->send(new contactEmail($data));
}

And in mail class change as below: take view name from $data,

return $this->from($quickQuoteemail->sysm_value,$this->data['ContactPerson'])
    ->subject('Contact Us Enquiry')->view($this->data['view_name'])->with('data',$this->data);
Related