Laravel 12 E-Commerce Project - Send Order Confirmation Email
Laravel 12 E-Commerce Project - Send Order Confirmation Email
Laravel 12 E-Commerce Project Tutorial
Sending Order Confirmation Email upon Checkout
Hi everyone, welcome back to the Laravel E-Commerce Tutorial. This video guides you through setting up and sending an Order Confirmation Email to the user immediately after an order is successfully placed.
-
Create the Mailable Class
Use the Artisan command to generate the `Mailable` class for the order confirmation email:
php artisan make:mail OrderConfirmationMail -
Define the `OrderConfirmationMail` Class
Open `app/Mail/OrderConfirmationMail.php` and define the constructor to accept the `$order` model, and configure the `envelope` and `content` methods. The subject will be dynamic, and the view will be set to `emails.order_confirmation`:
use AppModelsOrder; // Assuming the Order model is imported class OrderConfirmationMail extends Mailable { use Queueable, SerializesModels; protected $order; public function __construct(Order $order) { $this->order = $order; } public function envelope(): Envelope { return new Envelope( subject: "Order Confirmation - Order #" . $this->order->id, ); } public function content(): Content { return new Content( view: "emails.order_confirmation", with: [ "order" => $this->order, ], ); } } -
Create the Email View (`emails/order_confirmation.blade.php`)
Create the view file where the email content will be rendered. This template will use the
$ordervariable passed from the Mailable class to display order details, such as items purchased, totals, and shipping address. (The content snippet shows a basic structure, including the order ID and a link to view the order). -
Update the `place_order` Function
In `CartController.php`, import the Mailable class and add the mail sending logic within the `place_order` function, right before redirection. This step also includes cart cleanup after the order is finalized:
use AppMailOrderConfirmationMail; use IlluminateSupportFacadesMail; // Ensure Mail Facade is imported use GloudemansShoppingcartFacadesCart; // Ensure Cart Facade is imported use IlluminateSupportFacadesSession; // Ensure Session Facade is imported // ... inside the place_order function after order creation and transaction save ... // Send the confirmation email Mail::to($order->email)->send(new OrderConfirmationMail($order)); // Using $order->email or Auth::user()->email // Note: The source snippet uses a hardcoded email, which should be replaced with the user'semail dynamically. // Mail::to(users: "sudhirmo.co@gmail.com")->send(mailable: new OrderConfirmationMail(order: $order)); // Original source example // Clear Cart and Session data Cart::instance("cart")->destroy(); Session::forget(keys: "checkout"); Session::forget(keys: "coupon"); Session::forget(keys: "discounts"); Session::put(key: "order_id", value: $order->id); // Redirect to the confirmation page return redirect()->route(route: "cart.order.confirmation"); -
Configure SMTP Settings in `.env`
Update your `.env` file with the necessary SMTP configuration for sending emails. You will need to replace the placeholder values with your actual mail server credentials (e.g., for Gmail, use an App Password):
MAIL_MAILER=smtp MAIL_SCHEME=null MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=your_email@gmail.com MAIL_PASSWORD=your_app_password MAIL_FROM_ADDRESS=your_email@gmail.com MAIL_FROM_NAME="${APP_NAME}"
Verification and Testing 📧
1. Ensure your `.env` file is properly configured with valid credentials.
2. Place a new order on the frontend.
3. After successful order completion, check the email address associated with the order (or the hardcoded test email) for the new Order Confirmation Email.
Thanks for watching this video. Don'tforget to subscribe to my channel!