Quay lại

Sử dụng different mail drivers dynamically trong Laravel Chuyên mục PHP và Laravel    2023-08-02    317 Lượt xem    90 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Sử dụng different mail drivers dynamically trong Laravel

Gửi email trong Laravel thật dễ dàng. Tất cả những gì bạn phải làm là cấu hình service mặc định của mình trong config/mail.php và cấu hình liên quan của nó trong tệp config/services.php.

Chẳng hạn, nếu bạn muốn sử dụng AWS SES, trước tiên bạn cần thiết lập cấu hình của nó trong config/services.php như này.

return [
        // ...
        'ses' => [
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
        ],
];

Và sau đó đặt nó làm mặc định trong config/mail.php

return [
    // code commented for brevity

    'driver' => env('MAIL_DRIVER', 'ses'),

    // code commented for brevity
]

Bây giờ, mỗi khi bạn cố gắng gửi email bằng cách sử dụng facade Illuminate\Support\Facades\Mail, nó sẽ luôn sử dụng tùy chọn mặc định. tức là "ses" trong trường hợp của chúng ta.

Nhưng nếu bạn muốn một số loại linh hoạt sử dụng các mailers khác nhau ở những nơi khác nhau thì sao? Um thùi, Laravel giúp bạn giải quyết vấn đề này.

Dynamic Mail Drivers

Laravel 7 đã giới thiệu một phương thức mới gọi là mailer trong Mail facade cho bạn khả năng chọn các mail drivers khác nhau cho các tình huống khác nhau. Ví dụ: ứng dụng của bạn có thể sử dụng Postmark để gửi mail giao dịch trong khi sử dụng Amazon SES để gửi thư hàng loạt.

Đây là cách bạn có thể sử dụng phương thức mailer để chọn một trong những mailer mà bạn đã định cấu hình trong file config/services.php.

Mail::mailer('postmark')
        ->to($request->user())
        ->send(new OrderShipped($order));

Bạn có thể nhanh chóng chuyển sang chế độ khác, chẳng hạn như “mandrill”, đối với một số trường hợp nhất định như vậy (miễn là bạn đã định cấu hình nó trước đó).

Mail::mailer('mandrill')
        ->to($request->user())
        ->send(new OrderShipped($order));

Nó là dễ dàng như vậy! hehe

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday