Viblo CTF
+10

Laravel - tôi đã gửi mail như thế nào?

Giới thiệu

Có thể nói trong mỗi website việc gửi mail là việc cực kỳ quan trọng. Chúng ta cần gửi mail khi nào? Đơn giản khi đăng ký thành công một account, reset password, change password,... chúng ta cần phải gửi mail success đến member. Mail giúp tăng tính hiệu quả, tính bảo mật, chuyên nghiệp và truyền tải thông tin nhanh chóng. Nhận ra được tác dụng to lớn của việc gửi mail, tôi cũng đã áp dụng nó vào project của mình. Tham khảo: https://laravel.com/docs/5.6/mail

Tôi đã gửi mail như thế nào?

Như đã nói ở trên, tôi áp dụng việc gửi mail trong khá nhiều chức năng cho project của mình. Và mail thể hiện được công dụng nổi bật và to lớn nhất của nó trong việc booking. Link: http://framgia-travel.herokuapp.com, Github: https://github.com/vanquynguyen/framgia_travel_02 Tôi đã sử dụng mail trong chức năng booking của project. Khởi tạo Trong file .env:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=//Your email
MAIL_PASSWORD=//Your password
MAIL_ENCRYPTION=tls

Chắn chắn rằng email của bạn đã được tắt xác minh 2 bước Nếu chưa tắt bạn có thể làm theo các bước sau:

  • Bật Xác minh 2 bước.
  • Tắt Xác minh 2 bước.
  • Đăng nhập bằng Xác minh 2 bước.
  • Khóa bảo mật.
  • Cài đặt Google Authenticator.
  • Thêm hoặc xóa máy tính đáng tin cậy.
  • Xóa mật khẩu ứng dụng.
  • Sử dụng điện thoại mới để nhận mã Xác minh 2 bước.

Việc thêm email vs password coi như đã xong. Dưới đây là giao diện booking Tạo view có tên email.blade.php, view này sẽ là nội dung email

<h2>Thank you for using our service !</h2>
<p>Plans : <b>{{ $booking->plan->name }}</b></p>
<p>Full name : <b>{{ $booking->full_name }}</b></p>
<p>Email : <b>{{ $booking->email }}</b></p>
<p>From : <b>{{ $booking->start_at }}</b></p>
<p>To <b>{{ $booking->end_at }}</b></p>
<p>Adult : <b>{{ $booking->adult }}</b></p>
<p>Child : <b>{{ $booking->child }}</b></p>
<h3>total : {{ $booking->total_amount }} $</h3>

Mở terminal lên và gõ lệnh:

$ php artisan make:mail MailBooking

MailBooking sau khi tạo xong sẽ nằm trong thư mục app\Mail như hình bên dưới Mở app\mail\Booking.php. Config đôi chút

namespace App\Mail;

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

class MailBooking extends Mailable
{
    use Queueable, SerializesModels;

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

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('admin._component.plan.email'); //view email.blade.php vua tao o tren
    }
}

Trong controller: Nhận request, lưu thông tin booking và gửi mail thông báo

namespace App\Http\Controllers\Sites;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\Models\Booking;
use App\Mail\MailBooking;
use Mail;

class BookingController extends Controller
{
    public function store(Request $request)
    {
         DB::beginTransaction();

        try {
            $plan = Plan::findOrFail($request->id);
            $bookings = Booking::whereBooking(Auth::user()->id, $request->id)->pluck('id')->last();
            $booking = new Booking();
            $booking->user_id = Auth::user()->id;
            $booking->plan_id = $request->id;
            $booking->fill($request->all());
            $booking->status = config('setting.unpaid');
            $booking->save();
            
            Mail::to($request->email)->send(new MailBooking($booking));
            
            DB::commit();
        } catch (Exception $e) {
            DB::rollback();
            $response['error'] = true;

            return response()->json($response);
        }
    }
}

Sau khi thực hiện xong quá trình booking:

Lời kết

Hy vọng sau bài viết này mọi người có thể gửi mail dễ dàng cho project của mình. Đây là cách gửi mail mình hay sử dụng, tuy nhiên cũng có vô vàn cách gửi mail khác. Rất mong được ý kiến đóng góp của mọi người. 😊 😊 😊


All Rights Reserved