algolia search

Tìm thấy x bài viết trong xms.

Làm thế nào để hạn chế email tạm khi vận hành dịch vụ web


Khi vận hành một dịch vụ web hay SaaS như FlashPanel, một trong những vấn đề đau đầu là người dùng đăng ký bằng email tạm. Email tạm thường là những email dùng một lần (disposable email) được tạo ra để qua mặt đăng ký, và nhìn chung:

  • Không có giá trị thực sự, vì người dùng có thể không quay lại.
  • Lãng phí tài nguyên hệ thống: gửi email xác thực, lưu trữ dữ liệu, tính toán thống kê, …
  • Làm méo mó dữ liệu người dùng thật, ảnh hưởng đến phân tích và marketing.

Vì vậy, cần lọc ngay từ khâu đăng ký, đảm bảo người dùng là thật.

Cách mình làm ở FlashPanel

Mình sử dụng package Laravel Disposable Email để lọc email tạm:

  1. Cài đặt package:
composer require propaganistas/laravel-disposable-email

Laravel sẽ tự động phát hiện service provider.

  1. Publish file config và tùy chỉnh:
php artisan vendor:publish --tag=laravel-disposable-email
  • Mọi dữ liệu các email tạm được lấy từ URL chính:
https://cdn.jsdelivr.net/gh/disposable/disposable-email-domains@master/domains.json
  • Nhưng vấn đề là các email tạm do dịch vụ ở Việt Nam tạo chưa có trong danh sách, nên cần custom thêm.
  1. Tạo fetcher custom để bổ sung email tạm Việt Nam:
  • Tạo file app/DisposableEmail/Fetcher.php
  • <?php
    
    namespace App\DisposableEmail;
    
    use InvalidArgumentException;
    use Propaganistas\LaravelDisposableEmail\Fetcher\DefaultFetcher;
    use UnexpectedValueException;
    
    class Fetcher extends DefaultFetcher
    {
        /**
         * @param  string  $url
         * @return string[]
         */
        public function handle($url): array
        {
            if (! $url) {
                throw new InvalidArgumentException('Source URL is null');
            }
    
            $content = file_get_contents($url);
    
            if ($content === false) {
                throw new UnexpectedValueException('Failed to interpret the source URL ('.$url.')');
            }
    
            if (! $this->isValidJson($content)) {
                throw new UnexpectedValueException('Provided data could not be parsed as JSON');
            }
    
            /** @var array<int, string> $data */
            $data = json_decode($content);
    
            array_push(
                $data,
                'mail22h.com',
                'mailauto.store',
                'mail22h.shop',
                'mail22h.online',
            );
    
            return $data;
        }
    }
    
  • Trong config/disposable-email.php thay:
'fetcher' => App\DisposableEmail\Fetcher::class,

Điều này cho phép bạn kiểm soát danh sách email tạm bổ sung theo nhu cầu.

Bước tiếp theo: whitelist email đáng tin cậy

Khi có người dùng đăng ký mới:

  • Nếu email thuộc whitelist như Gmail, Yahoo, Outlook, ProtonMail… thì xem xét xét thêm trước khi quyết định xóa hay chặn.
  • Những email còn lại có thể được đánh dấu là email tạm, từ đó ngăn đăng ký hoặc yêu cầu xác thực bổ sung.

Kết quả

  • Giảm đáng kể tỷ lệ đăng ký rác.
  • Tài nguyên hệ thống được sử dụng cho người dùng thật.
  • Dữ liệu và báo cáo người dùng chính xác hơn.

Kết luận: Lọc email tạm ngay từ đăng ký là bước quan trọng với bất kỳ dịch vụ nào muốn phát triển bền vững. Với Laravel, việc sử dụng Laravel Disposable Email cùng custom fetcher là cách đơn giản, hiệu quả để đảm bảo người dùng thật.

Đánh giá bài viết

Thích thì like
Làm thế nào để hạn chế email tạm khi vận hành dịch vụ web
5/5 1 votes

Bình luận

Hiển thị bình luận Facebook