Cách gửi mail trong laravel Framework - phần 1 - ICTsharing - Blog chia sẻ kiến thức về ICT

Hot

Post Top Ad

Thứ Sáu, 19 tháng 4, 2019

Cách gửi mail trong laravel Framework - phần 1

Phần 1: hướng dẫn cách gửi mail trong laravel framework qua SMTP của gmail.
Ứng dụng gửi mail được áp dụng rất nhiều trong các project, phần này mình hướng dẫn cơ bản về cách làm, vì mỗi ứng dụng có cách lấy dữ liệu khác nhau.
ưu điểm cách làm này, chờ post một bài rất chậm vì quá trình xử lý gửi mail. Sang phần 2 mình sẽ hướng dẫn cách xử lý gửi mail qua Queue.

Thông tin
 - Phiên bản laravel 5.8
 - Ứng dụng diễn đàn cơ bản gửi mail thông báo lại khi tạo thread thành công.
 - Sử dụng Resource Controller
 - Gửi mail bằng SMTP gmail

Cách làm
- Cấu hình trong file .env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME= Dia_chi_gmail
MAIL_PASSWORD= Mat_khau_gmail
MAIL_ENCRYPTION=tls

Chú ý:
Chắc chắn gmail của bạn đã tắt xác minh 2 bước

Bạn có thể kiểm tra lại theo cách 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.

Vào Cài đặt (setting) của mail, chọn Thay đổi Tùy chọn và khôi phục mật khẩu

Tắt xác minh 2 bước như hình dưới.


  OK, như vậy là cài đặt và xử lý phần gmail đã xong.
Giờ chúng ta bắt đầu vào ứng dụng.

Tạo view có tên là SendMailCreateThreadToSuccess.blade.php
<h2>Thank you for Post Thread on Forum Us!</h2>
<p>Title : <b>{{ $thread->title }}</b></p>
<p>Link : <b>http://ictsharing.com/{{ $thread->path() }} </b></p>
<h3>Thanks</h3>


Chuột phải vào thư mục project để mở Terminal và gõ lệnh sau:
 $ php artisan make:mail SendMailCreateThreadToSuccess
Sau khi tạo xong, file SendMailCreateThreadToSuccess.php sẽ nằm trong thư mục App\Mail như hình bên dưới.

Mở file app\mail\SendMailThreadToSuccess.php và cấu hình thêm
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;
use App\Thread;

class SendMailCreateThreadToSuccess extends Mailable
{
    use Queueable, SerializesModels;
    public $user;
    public $thread;
   
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(User $user, Thread $thread)
    {
  
        $this->user = $user;
        $this->thread = $thread;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('threads.sendMailCreateThreadToSuccess');
    }
}

Trong đó:
- use App\User: là Model của User truyền vào để lấy thông tin user cụ thể là mail
- use App\Thread: Model của Thread

Hàm __construct là hàm khởi tạo được truyền hai tham số User và thread
Hàm Build trả về view vừa tạo ở trên đó cũng chính là nội dung email gửi về cho tác giả tạo thành công thread.
Xem trên hình ảnh:


Trong controller:
 Nhận request, tạo thread và gửi mail thông báo khi tạo thành công.
 Xử lý ở hàm store như sau:
 
    public function store(Request $request, User $user)
    {
       
        $this->validate($request, [
            'title' => 'required',
            'body' => 'required',
            'channel_id' => 'required|exists:channels,id'
        ]); 
        
        $thread = Thread::create([
            'user_id' => auth()->id(),
            'channel_id' => request('channel_id'),
            'title' => request('title'),
            'body' => request('body')
        ]);
        
        // send mail to creator thread
        Mail::to($request->user(), $thread)->send(new SendMailCreateThreadToSuccess($user, $thread));

        return redirect($thread->path())
                ->with('flash', 'Your thread has been published');
    }

Xem trên hình ảnh:

 Mình chụp cả phần đầu để các bạn đừng quên thêm use Mail và use App\Mail\SendMailCreateThreadToSuccess;

Cuối cùng là xử lý hàm store

Ở đây, trong ứng dụng của các bạn chỉ chú ý đoạn
// send mail to creator thread
        Mail::to($request->user(), $thread)->send(new SendMailCreateThreadToSuccess($user, $thread));
Đoạn này để gửi mail cho người tạo thread và truyền thông tin thread vào view gửi về mail.

 => Như vậy là xong.
Giờ chúng ta thử tạo thread nhé!

Kết quả trả về mail


Cách gửi mail trong laravel 5.8 bằng SMTP của gmail đã thành công. Tuy nhiên, khi làm thành công các bạn sẽ thấy, khi nhấn publish sẽ phải đợi 3-4s để gửi mail thành công mới trả về thành công.
Phần 2 mình sẽ hướng dẫn cách gửi mail sử dụng hàng đợi mà hiện nay đang được sử dụng rất phổ biến.
Nếu có thắc mắc các bạn đừng ngại gửi comment phía dưới nhé!

Không có nhận xét nào:

Đăng nhận xét

Post Top Ad

Your Ad Spot