Email Send with attachment tutorial in Laravel 11

 <?php


namespace App\Http\Controllers;

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

class EmailController extends Controller
{
    public function sendEmail()
    {
        $toEmail = "findjquery@gmail.com";
        $moreUser = "heernayakpara997@gmail.com";
        $message = "Hello, Welcome to our website";
        $subject = "Welcome to YahooBaba";
        $details = [
            "name" => "John Doe",
            "product" => "Test Product",
            "price" => 250
        ];

        // send same email to multiple users as shown below :
        // $emails = [
        //     "user1@gmail.com",
        //     "user2@gmail.com",
        //     "user3@gmail.com",
        // ];

        // foreach($emails as $recipient) {
        //     Mail::to($recipient)->send(new welcomeemail($message, $subject));
        // }

        // Below cc means "carbon copy" for send mail to another user
        $request = Mail::to($toEmail)->cc($moreUser)->send(new welcomeemail($message, $subject, $details));
        dd($request);
    }

    public function contactForm()
    {
        return view("contact_form");
    }

    public function sendContactEmail(Request $request)
    {
        $request->validate([
            "name" => "required",
            "email" => "required|email",
            "subject" => "required|min:5|max:100",
            "message" => "required|min:10|max:255",
            "attachment" => "required|mimes:pdf,doc,docx,xls,xlsx|max:2048"
        ]);

        $fileName = time() . "." . $request->file("attachment")->extension();
        $request->file("attachment")->move("uploads", $fileName);
        $adminEmail = "heernayakpara997@gmail.com";
        $response = Mail::to($adminEmail)->send(new welcomeemail($request->all(), $fileName));

        if ($response) {
            return back()->with("success", "Thank you for contacting us.");
        } else {
            return back()->with("error", "Unable to submit form, Please try again.");
        }
        dd($fileName);
    }
}
Above File is app\Http\Controllers\EmailController.php File





Below File is app\Mail\welcomeemail.php File
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;

class welcomeemail extends Mailable
{
    use Queueable, SerializesModels;

    public $request;
    public $fileName;

    // public $mailmessage;
    // public $subject;
    // private $details;
    // If we take above variable private or protected then we have to declare that variable in "content()" method
    // as shown below :

    /**
     * Create a new message instance.
     */
    public function __construct($request, $fileName)
    {
        $this->request = $request;
        $this->fileName = $fileName;

        // $this->mailmessage = $message;
        // $this->subject = $subject;
        // $this->details = $details;
    }

    /**
     * Get the message envelope.
     */
    public function envelope(): Envelope
    {
        return new Envelope(
            subject: "Contact Form",
            // subject: $this->subject,
        );
    }

    /**
     * Get the message content definition.
     */
    public function content(): Content
    {
        return new Content(
            view: 'mail.welcome_mail',
            // text: "mail.welcome_mail",
            // Here above, we have declared "details" variable as private(or protected)
            // Hence, we have to declare below "with" method as shown below :
            // with: [
            //     "name" => $this->details["name"],
            //     "product" => $this->details["product"],
            //     "price" => $this->details["price"]
            // ]
        );
    }

    /**
     * Get the attachments for the message.
     *
     * @return array<int, \Illuminate\Mail\Mailables\Attachment>
     */
    public function attachments(): array
    {
        $attachments = [];

        if ($this->fileName) {
            $attachments = [
                Attachment::fromPath(public_path("/uploads/" . $this->fileName))
            ];
        }

        return $attachments;
    }
}





Below File is resources\views\mail\welcome_mail.blade.php File
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    {{-- <title>{{ $subject }}</title> --}}
    <title>{{ $request["subject"] }}</title>
</head>
<body>
    {{-- <h3>{{ $subject }}</h3>
    <p>{{ $mailmessage }}</p> --}}
    {{-- <p>{{ $details["name"] }}</p>
    <p>{{ $details["product"] }}</p>
    <p>{{ $details["price"] }}</p> --}}

    {{-- If we have declared variable as private or protected in Mailable class then we have to declared that
    variable in blade file as shown below : --}}
    {{-- <p>{{ $name }}</p>
    <p>{{ $product }}</p>
    <p>{{ $price }}</p> --}}

    <h3>Hello, Admin</h3>
    <p>Name : {{ $request["name"] }}</p>
    <p>Email : {{ $request["email"] }}</p>
    <p>Subject : {{ $request["subject"] }}</p>
    <p>Message : {{ $request["message"] }}</p>
</body>
</html>





Below File is resources\views\contact_form.blade.php File
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Contact Form</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-lg-6 mt-2">
                <form action="{{ route("contact") }}" method="POST" enctype="multipart/form-data">
                    @csrf
                    <div class="card">
                        @if(session("success"))
                        <div class="alert alert-success m-2" role="alert">
                            {{ session("success") }}
                        </div>
                        @elseif(session("error"))
                        <div class="alert alert-danger m-2" role="alert">
                            {{ session("error") }}
                        </div>
                        @endif

                        <div class="card-header">
                            <div class="card-title">
                                <h3>Contact Form</h3>
                            </div>
                        </div>
                        <div class="card-body">
                            <div class="mb-3">
                                <label for="name" class="form-label">Name</label>
                                <input type="text" value="{{ old("name") }}" class="form-control @error("name") is-invalid @enderror" name="name" id="name" placeholder="Enter Name"/>
                                @error("name")
                                <p class="text-danger">{{ $message }}</p>
                                @enderror
                            </div>
                            <div class="mb-3">
                                <label for="email" class="form-label">Email address</label>
                                <input type="email" value="{{ old("email") }}" class="form-control @error("email") is-invalid @enderror" name="email" id="email" placeholder="Enter Email"/>
                                @error("email")
                                <p class="text-danger">{{ $message }}</p>
                                @enderror
                            </div>
                            <div class="mb-3">
                                <label for="subject" class="form-label">Subject</label>
                                <input type="text" class="form-control @error("subject") is-invalid @enderror" name="subject" id="subject" placeholder="Enter Subject"/>
                                @error("subject")
                                <p class="text-danger">{{ $message }}</p>
                                @enderror
                            </div>
                            <div class="mb-3">
                                <label for="message" class="form-label">Message</label>
                                <textarea class="form-control" name="message" id="message" placeholder="Enter message"></textarea>
                                @error("message")
                                <p class="text-danger">{{ $message }}</p>
                                @enderror
                            </div>
                            <div class="mb-3">
                                <label for="attachment" class="form-label">Attach File</label>
                                <input type="file" class="form-control" name="attachment" id="attachment"/>
                                @error("attachment")
                                <p class="text-danger">{{ $message }}</p>
                                @enderror
                            </div>
                        </div>
                        <div class="card-footer">
                            <input type="submit" class="btn btn-primary">
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</body>
</html>





Below File is routes\web File
<?php

use App\Http\Controllers\EmailController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::controller(EmailController::class)->group(function () {
    Route::get("send-email", "sendEmail");
    Route::get("contact", "contactForm");
    Route::post("contact", "sendContactEmail")->name("contact");
});









Comments

Popular posts from this blog

Eloquent Many to Many Relationship Tutorial in Laravel 11

Eloquent with JSON Data Columns Tutorial in Laravel 11

Blade Template Tutorial Three Template Inheritance in Laravel 11