Mailgun là một là dịch vụ gửi nhận mail API rất hay. Nó cho phép bạn bạn gửi nhận và quản lý email từ website của bạn đến khách hàng.
Đăng ký tài khoản ở mailgun
Vào địa chỉ : https://www.mailgun.com/ rồi nhắp nút Start Sending để đăng ký tài khoản. Đăng ký và kích hoạt thành công bạn sẽ được chuyển đến trang quản trị Mailgun.
Khai báo domain dùng để gửi mail
Vào mục Sending => Domains để khai báo các domain sẽ dùng để gửi mail. Nếu chỉ gửi test cho biết thì dùng luôn domain sanbox đã tạo sẵn cho bạn, nếu vậy thì ghi domain lại để chút nữa dùng đến.

Lấy Private API Key
Nhắp link ở góc phải trên trang Mailgun rồi chọn API keys (xem hình trên) bạn sẽ thấy thông tin Private API Key của mình. Nhắp nút con mắt để hiện đầy đủ rồi copy lại chút nữa dùng.

Cài đặt GuzzleHttp
Để gửi mail trong laravel. bạn cài thêm thư viện GuzzleHttp:
composer require guzzlehttp/guzzle
Cấu hình gửi email trong Laravel
a. Cấu hình file .env
Mở file .env và thêm một số hằng số sau vào cuối file
MAIL_PORT=587
MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=Điền Domainnames đã copy ở trên
MAILGUN_SECRET=Điền Private API Key đã copy ở trên
b. Cấu hình file mail.php
Mở file config/mail.php, trong mục from khai báo email và tên người gửi
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'email@củabạn'),// email gửi
'name' => env('MAIL_FROM_NAME', 'Tên của bạn'),// tên người gửi mail
],
c. Cấu hình file service.php
Mở file config/service.php và thêm đoạn này vào rồi lưu lại
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
],
Tạo mail mailable class
Mailable class là 1 template bạn cần tạo ra để gửi mail. Chúng được lưu trong folder app
/Mail
. Tạo 1 mailable class bằng artisan như sau
php artisan make:mail GuiEmail
Mở file mới tạo, bạn sẽ thấy hàm built, trong đó có lệnh nạp viiew, bạn sửa lại thành tên view chứa nội dung mail muốn nạp.
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class GuiEmail extends Mailable {
use Queueable, SerializesModels;
public function __construct() {
//
}
public function build() {
return $this->view('guimail');
}
}
Tạo view chứa nội dung mail
Tạo file resources/views/guimail.blade.php (giống tên vừa khai báo trong hàm built ở trên) và soạn nội dung cho mail sắp gửi:
Chào bạn
Khỏe không bạn? Chúc an lành! Chúc thành công
Tạo controller
Tiếp theo bạn tạo controller để gửi mail, nội dung như sau:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Mail;
use App\Mail\GuiEmail;
class GuimailController extends Controller {
function guimail(){
$id = 1;
$user = User::findOrFail($id);
Mail::to($user)->send(new GuiEmail());
}
}
Trong controller khai báo hàm guimail, trong hàm sẽ lấy thông tin của user nào đó trong bảng users để gửi (hàm đang lấy user có id=1, bạn có thể dùng giá trị khác với điều kiện email có thật trên internet nhé). Sau đó dùng hàm send để gửi mail với mailable class là GuiEmail.
Chú ý: để lấy được thông tin từ bảng user, bạn nhớ tạo model user nhé (php artisan make:model…)
Tạo route gửi email
Mở file routes/web.php và thêm route sau
Route::get('/guimail', "GuimailController@guimail");
Thực hiện gửi mail
Mở trình duyệt và gõ: http://localhost/website_folder/public/guiemail
Nếu không có thông báo lỗi hiện ra tức là bạn đã gửi email thành công, ngược lại nếu bạn thấy lỗi, thì xử lý tiếp. Có thể bạn cấu hình sau user, pass… Thường thì lỗi này sẽ hiện ra:
400 BAD REQUEST` response: { "message": "Sandbox subdomains are for test purposes only. Please add your own domain or add the address to authoriz (truncated…
Lý do là bạn đang dùng domain sandbox để gửi mail nên bị hạn chế. Bạn cần khai báo trước email người nhận và được người confirm thì gửi OK
Khai báo email người nhận trong mailgun
Trong trang quản trị mailgun, vào Sending è Domains è nhắp domain sandbox của bạn rồi khai báo email người nhận (bên cột phải) . Xong thì vào hộp thư nhắp link confirm là xong.
