This episode is for members only

Sign up to access "Build an E-Commerce Platform" right now.

Get started
Already a member? Sign in to continue
Playing
66. Sending the order status change email

Episodes

0%
Your progress
  • Total: 8h 42m
  • Played: 0m
  • Remaining: 8h 42m
Join or sign in to track your progress
01. Introduction and demo
9m 42s
0%
02. Installing Laravel, Breeze and Livewire
4m 47s
0%
03. Creating categories
9m 4s
0%
04. Recursively displaying categories
8m 21s
0%
05. Product model and migration
2m 50s
0%
06. Showing a product
7m 50s
0%
07. Product variation setup
10m 26s
0%
08. Creating the product selector
10m 34s
0%
09. Loading child variation dropdowns
4m 28s
0%
10. Faking adding the final variation
9m 33s
0%
11. Setting up product stock
4m 34s
0%
12. Calculating variation stock levels
9m 1s
0%
13. Adding product images with MediaLibrary
8m 50s
0%
14. Creating the product gallery
7m 28s
0%
15. Providing a fallback image
2m 56s
0%
16. Adding media to product variations
3m 37s
0%
17. Creating the cart model
3m 37s
0%
18. Registering the cart service
6m 34s
0%
19. Creating a cart session
11m 4s
0%
20. Showing the cart in the navigation
9m 19s
0%
21. Caching the cart instance
3m 2s
0%
22. Adding items to the cart
14m 1s
0%
23. Creating the notification component
8m 5s
0%
24. Showing the user's cart
6m 50s
0%
25. Outputting cart items
4m 50s
0%
26. Showing variation specifics
8m 8s
0%
27. Updating item quantity
8m 2s
0%
28. Removing an item from the cart
6m 1s
0%
29. Calculating the cart summary
8m 7s
0%
30. Showing the category products page
5m 1s
0%
31. Indexing products in Meilisearch
8m 32s
0%
32. Hooking up products to categories
4m 15s
0%
33. Building the product browser
13m 32s
0%
34. Showing child categories
1m 51s
0%
35. Indexing product variations for filtering
8m
0%
36. Outputting variations for filtering
12m 52s
0%
37. Hooking up product filters with Livewire
7m 48s
0%
38. Filtering products
12m 24s
0%
39. Filtering by price
9m 50s
0%
40. Adding global navigation search
7m 50s
0%
41. Handling products that are not live
3m 22s
0%
42. Price range category fix
1m 18s
0%
43. Scaffolding the checkout page
8m 6s
0%
44. Listing shipping options
9m 3s
0%
45. Calculating the cart totals
2m 52s
0%
46. Validating the account form
9m 10s
0%
47. Validating the shipping form
5m 47s
0%
48. Saving the shipping address
8m 4s
0%
49. Selecting a saved shipping address
6m 39s
0%
50. Fix shipping address error for non authenticated users
1m 7s
0%
51. Redirecting if the cart is empty
2m 42s
0%
52. Checking for quantity changes
7m 11s
0%
53. Syncing if quantities have changed
11m 59s
0%
54. Flashing a message when quantities have changed
5m 48s
0%
55. Setting up for orders
5m 17s
0%
56. Creating an order
13m 24s
0%
57. Attaching variations to order
6m 13s
0%
58. Reducing stock after ordering
2m 56s
0%
59. Meilisearch filter query fix
1m 33s
0%
60. Showing the order confirmation page
7m 39s
0%
61. Attaching orders for registering guest users
5m 17s
0%
62. Scaffolding the orders page
5m 30s
0%
63. Filling in order variation details
5m 24s
0%
64. Returning the order status
4m 39s
0%
65. Detecting order status changes
10m 49s
0%
66. Sending the order status change email
5m 12s
0%
67. Sending an order confirmation email
2m 47s
0%
68. Handling deleted cart records
4m 44s
0%
69. Transferring the guest cart
2m 44s
0%
70. Creating a presenter for the order status
4m 31s
0%
71. Setting up Stripe
3m 43s
0%
72. Creating and updating a PaymentIntent
16m 21s
0%
73. The Stripe card form
3m 35s
0%
74. Validating before payment
5m 34s
0%
75. Submitting a payment
6m 40s
0%
76. Checking for a successful payment
5m 47s
0%
77. Handling Stripe client errors
3m 11s
0%
78. Entangling Stripe customer data
2m 18s
0%

Transcript

00:00
So when the status of our order does change, we're going to go ahead and send an email.
00:03
We're going to do a very plain email in this episode and then we can fill this in a little bit later on. First of all, though, we want to go ahead and actually get set up with local email. For this, I'm going to use MailHug. It doesn't matter what you use, whether you use a piece of software like Hello or use a third party service like MailTrap, really doesn't matter.
00:22
But if you're interested in setting MailHug up, this is how we do it. Now, I'm running on a Mac, so I just use brew update and brew install MailHug. But there are other options depending on your operating system. Now, once you've done that, you'll be able to access this over on port 8025 on local.
00:41
Once you've started the MailHug server. So I already have this installed. I'm just going to go ahead and run this over in my terminal. And that's going to boot up a server which we can now access. And all of your emails that you send through Laravel should now roll into this fake inbox.
00:57
Now, we might need to configure this. So if we just head over to EMV, head over to our mail section, you can see Laravel is actually pretty much already set up to use MailHug here. The username and password can be null. Same with encryption.
01:09
The only thing we do need to add is the mail from address. I'm just going to set that to Alex at CodeCourse.com. OK, so let's go ahead and send out an email in here. The first thing that we need to do is actually generate out an email
01:21
and we'll call this order status updated. OK, so that's created out a mailable order status updated. If you want to, rather than return a view here, you could go ahead and put this as a markdown email.
01:38
Just to show you that really quickly, if you're new, let's get rid of this order status updated. What you can do is do pretty much the same thing, but provide the markdown option and then in here give the path to the markdown. For example, emails orders updated.
01:54
So if we just go ahead and check this out, order status updated, this will now point to a markdown file. And if we open updated.blade.php, this basically allows you to define this in markdown within Laravel.
02:09
Let's leave it like this because it's a little bit nicer. So in here your order has been updated or the status of your order has changed and we could grab this and go ahead and set that as a subject of the email. So let's do that and then we'll fill the rest of the information out in here later.
02:35
OK, let's actually send the email. So over in our order observer, this is where we want to do this. Now, we're not going to queue this just yet. Let's go ahead and say order to and who are we sending this to?
02:46
Well, on the order we have a user relationship. That is who we're sending it to. Let's make sure we put in the mail facade and we want to send a new order status updated email
03:01
and into this we probably want to pass the order. So that's the original order here that has been changed. So we're going to have all of that updated information. So in order status updated, let's go ahead and accept this in as a dependency.
03:15
So let's say public order order and make sure we pull the namespace in. So that will now be available in the template so we can grab any of the information about that. For example, we could go ahead and say hash and then order ID.
03:35
We'll leave it at that for now. Okay, let's go ahead and check that this actually sends the email. So first of all, let's head over to the database, switch packaged at and shipped at to null
03:46
and let's go back over from phps and tinker. Let's go ahead and grab that order out. So order find one and let's say order update and packaged at and set that to now.
04:03
Okay, it looks like we've got an error here that she's sending the email. Let's just revert packaged at back for now. I think that's just because over in EMV, we're going to go ahead and set the mail host to local host rather than mail hog.
04:17
That's just if you're using Laravel sale, which we're not in this case. And let's go ahead and try this again. So we're going to go ahead and say order update packaged at now
04:26
and make sure we quit out of tinker first so the settings come in. So let's find that order and go ahead and switch that over and we should be good. Great. So let's go over to mail hog.
04:40
There we go. We get a email here, of course sent to the user who has placed the order and the status of your order hash one has changed and you could technically go ahead and grab the status out in here,
04:54
maybe link through to the orders page, whatever you needed to do. So we'll leave it at that for now because sending the email is the most important part.
05:01
You can go ahead and fill in either the markdown in here or if you wanted to generate out a plain view, you could do that as well, but we'll come back to this later and fill it in just to tidy things up.
78 episodes8 hrs 42 mins

Overview

Build a robust e-commerce platform with a Laravel and Livewire. Features products with unlimited and flexible variations, a product browser with filters and price range slider, global product search, guest checkout, shipping and payment implementation, order status tracking and more.

Alex Garrett-Smith
Alex Garrett-Smith
Hey, I'm the founder of Codecourse!

Episode discussion

No comments, yet. Be the first!