Day 24 #100DaysOfCode
Hôm này mình đi tìm hiểu về cách tạo Mail trong Laravel 8, mình thấy rất rất là nhiều người dùng gửi Mail cho khách hàng, khi khách hàng đặt một sản phẩm trên website. Nên nay đi làm một ví dụ để sau này có gì xem lại
Đầu tiên cài đặt Laravel 8
composer create-project --prefer-dist laravel/laravel blog
Cấu hình tập tin .env
MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=mail_of_you@gmail.com MAIL_PASSWORD=password_of_you MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=mail_of_you@gmail.com MAIL_FROM_NAME="${APP_NAME}"
Tạo một class Mail
php artisan make:mail OrderMail
Sau khi chạy lệnh trên ta sẽ được một class file App\Mail\OrderMail.php , ta hãy mở file đó lên và chỉnh sửa thông tin orders cần gửi cho khách hàng
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use App\Models\Order; use Illuminate\Queue\SerializesModels; class OrderEmail extends Mailable { use Queueable, SerializesModels; /** * Create a new message instance. * * @return void */ protected $order; public function __construct(Order $order) { $this->order = $order; } /** * Build the message. * * @return $this */ public function build() { // dd($this->order); //return $this->view('view.name'); return $this->view('email.order-mail')->subject("Đơn Hàng Mới")->with(array("orders"=>$this->order)); } }
Bên trên mình cài đặt nhận đối tường $this->orders
protected $order; public function __construct(Order $order) { $this->order = $order; }
Sau đó để gửi mail ta sử dụng hàm build()
public function build() { // dd($this->order); //return $this->view('view.name'); return $this->view('email.order-mail')->subject("Đơn Hàng Mới")->with(array("orders"=>$this->order)); }
Bạn thấy trong hàm build() mình có return về View('email.order-mail'), chính vì thể ta hãy vào thư mục views/email , tạo file order-mail.blade.php, để hiển thị dữ liệu cần gửi mail cho khách hàng
<!DOCTYPE html> <html> <head> <title>hoanguyenit.com</title> <style> *{margin:0;padding:0} .dongdathang{ width:100%; margin:0 auto; max-width:1000px; } .form{ width:100%; } h3{color:red;width:100%;text-align:center; font-size:20px;padding:10px 0px;} strong{ font-size:14px; } table#order { border-collapse: collapse; width:100%; } table#order tr td{ padding:5px; text-align:center; box-sizing:border-box; } table.form-info tr td strong{ padding-left:5px; } </style> </head> <body> <div class="dongdathang"> <h3>ĐƠN ĐẶT HÀNG</h3> <div class="form"> <table class="form-info"> <tr class="form-group"> <td><abel>Tên khách hàng:</label></td> <td><strong>{{$orders->Name}}</strong></td> </tr> <tr class="form-group"> <td> <label>Ngày:</label></td> <td> <strong>{{$orders->created_at}}</strong></td> </tr> <tr class="form-group"> <td> <label>Số điện thoại: </label></td> <td> <strong>{{$orders->Phone}}</strong></td> </tr> <tr class="form-group"> <td> <label>Mã đơn hàng:</label></td> <td> <strong>{{$orders->id}}</strong></td> </tr> <tr class="form-group" style="width:100%"> <td> <label>Địa chỉ:</label></td> <td> <strong> Quận 6, Tp.HCM</strong></td> </tr> </table> <div class="form-order"> <table border="1" id="order"> <tr> <th>STT</th> <th>Sản phẩm</th> <th>Đơn vị</th> <th>Số lượng</th> <th>Đơn giá</th> <th>Thành Tiền</th> </tr> @php $sumPrice = 0; @endphp @foreach($orders->products as $key=>$product) @php $sumPrice+=$product->pivot->TotalPrice; @endphp <tr> <td>1</td> <td>{{$product->Title}}</td> <td>cái</td> <td>{{$product->pivot->Quantity}}</td> <td>{{number_format($product->pivot->Price)}} đ</td> <td>{{number_format($product->pivot->TotalPrice)}} đ</td> </tr> @endforeach <tr> <td colspan="5">Tổng tiền:</td> <td>{{number_format($sumPrice)}} đ</td> </tr> </table> </div> <table class="form-info"> <tr class="form-group" style="width:100%"> <td> <label>Ngày giao hàng:</label></td> <td><strong>{{$orders->created_at}}</strong></td> </tr> <tr class="form-group" style="width:100%"> <td> <label>Địa điểm giao hàng:</label></td> <td> <strong>Quận 6, Tp.HCM</strong></td> </tr> </table> </div> </div> </body> </html>
Bên trên là code hiển thị dữ liệu trả về cho khách hàng biết, thông tin sản phẩm mua, giá tiền, tổng tiền
Ok giờ ta tạo hãy mở file Controller và thiết lập gọi hàm gửi mail thôi, ví dụ bạn cấu hình như dưới đây
use Illuminate\Support\Facades\Mail; use App\Mail\OrderEmail; // including your class public function store(Request $request){ $orders = Order::findOrFail($request->id); // .... /// Mail::to('mail_of_you@gmail.com')->send(new OrderEmail($order)); return 1; }
Ok vậy là xong, bạn có thể gửi mail ok rồi đó, nếu bạn gửi mail bị lỗi thì hãy đăng nhập vào gmail, thiết lập password cho ứng dụng khác, sau đó, cập nhật password đó trong file .env
Hãy vào link : https://myaccount.google.com/u/2/security ,
1. Thiếp lập mật khẩu ứng dụng
2. Chọn ứng dụng và thiết bị bạn muốn tạo mật khẩu ứng dụng -> chọn Khác(tùy chỉnh)->Nhập tên gì cũng được->sau đó bấm tạo
3. Copy mật khẩu được sinh ra, copy nó, dáng vào file .env trong laravel
Okay, vậy là xong, chúc các bạn thành công!