Hộp thư catch-all là một hộp thư nhận tất cả: bất kể thư được gửi tới tên hộp thư nào trên một tên miền, lá thư cũng rơi vào cùng một chỗ. Với môi trường thử, đây là cách rất tiện để không phải tạo tài khoản thư cho từng ca kiểm thử, nhưng cũng là cách dễ gây ra sự cố nếu đặt sai phạm vi. Bài này nói rõ nó là gì, vì sao được dùng, và cần chặn những gì trước khi bật.
Hộp thư catch-all là gì?
Bình thường, khi thư tới một tên miền, máy chủ nhận phải đối chiếu tên hộp thư trong địa chỉ với danh sách hộp thư đã có. Tên nào không có trong danh sách thì thư bị từ chối. Cách làm đó chính xác nhưng cứng: muốn nhận thư cho một địa chỉ mới, bạn phải tạo hộp thư trước.
Hộp thư catch-all đảo ngược quy tắc đó. Thay vì từ chối những tên hộp thư không tồn tại, máy chủ nhận chấp nhận tất cả và dồn chúng vào một hộp thư duy nhất. Tên hộp thư trong địa chỉ trở thành một nhãn tự do: bạn có thể viết bất cứ thứ gì ở phần trước ký tự a còng, miễn là tên miền đúng.
Điều này không có gì mới về mặt kỹ thuật, vì việc chấp nhận hay từ chối tên hộp thư vốn là quyết định của máy chủ nhận. Cái mới chỉ là chính sách bạn chọn. Và mọi chính sách đều có giá của nó.
Vì sao môi trường thử hay dùng cách này?
Lý do chính là tốc độ. Trong một bộ kiểm thử tự động, mỗi ca cần một địa chỉ chưa từng được dùng. Nếu mỗi địa chỉ phải tạo trước bằng tay, bộ kiểm thử sẽ phụ thuộc vào một bước chuẩn bị thủ công, và bước thủ công nào cũng sẽ có ngày bị bỏ qua. Với một tên miền nhận tất cả, ca kiểm thử tự bịa ra địa chỉ theo quy ước của nó và chạy tiếp.
Lý do thứ hai là không cần dọn dẹp. Một tài khoản thư cho mỗi ca kiểm thử sẽ tạo ra hàng trăm tài khoản trong vài tháng, kèm mật khẩu, kèm dung lượng, kèm việc phải xóa bớt. Cách nhận tất cả gom mọi thứ vào một chỗ và bạn chỉ xử lý một hộp thư.
Lý do thứ ba là tính linh hoạt khi kiểm thử giao diện. Bạn muốn xem hệ thống xử lý một địa chỉ rất dài như thế nào, hoặc một địa chỉ có dấu chấm ở nhiều vị trí, hoặc một tên hộp thư chỉ toàn chữ số. Với cách nhận tất cả, bạn không phải chuẩn bị trước gì cả, chỉ cần đánh vào biểu mẫu.
Cái giá phải trả là gì?
Vấn đề đầu tiên là khối lượng. Một tên miền nhận tất cả sẽ nhận tất cả mọi thứ gửi tới nó, kể cả thư rác, kể cả thư do bot dò tên miền, kể cả thư mà một dịch vụ nào đó gửi nhầm. Hộp thư của bạn sẽ đầy nhanh hơn bạn tưởng, và việc đọc thư để tìm đúng lá cần tìm sẽ khó dần theo thời gian.
Vấn đề thứ hai nghiêm trọng hơn: có thể nhận cả thư của người thật. Nếu tên miền dùng cho môi trường thử lại trùng với tên miền mà sản phẩm thật đang dùng, hoặc nếu cấu hình bị đặt nhầm sang tên miền thật, hộp thư thử sẽ nhận thư của khách hàng thật. Đó không chỉ là chuyện lộn xộn trong hộp thư, mà là một sự cố về dữ liệu.
Vấn đề thứ ba là rò rỉ theo chiều ngược lại. Một hộp thư nhận tất cả thường được nhiều người trong nhóm truy cập và thường được bảo vệ lỏng hơn hộp thư cá nhân. Nếu thư của môi trường thử chứa nội dung nội bộ hoặc dữ liệu mẫu lấy từ dữ liệu thật, thì việc ai cũng mở được hộp thư đó là một lỗ hổng.
Làm sao để không nhận nhầm thư của người thật?
Cách chắc chắn nhất là tách hẳn tên miền. Môi trường thử phải dùng một tên miền riêng, không bao giờ dùng tên miền của sản phẩm đang chạy. Khi hai thứ nằm ở hai tên miền khác nhau, không có cấu hình sai nào có thể khiến thư thật chảy vào hộp thư thử.
Cách thứ hai là giới hạn phạm vi nhận. Thay vì nhận mọi thứ trên tên miền, hãy chỉ nhận những tên hộp thư khớp với một quy ước mà nhóm bạn đặt ra, ví dụ chỉ nhận tên bắt đầu bằng một tiền tố dành riêng cho kiểm thử. Phần còn lại bị từ chối thẳng, nên thư rác và thư gửi nhầm cũng không vào được.
Cách thứ ba là đặt thời hạn cho mỗi địa chỉ. Một địa chỉ kiểm thử chỉ cần sống trong lúc ca kiểm thử chạy; sau đó nó nên ngừng nhận thư. Cách này vừa giảm khối lượng, vừa giảm thiệt hại nếu một địa chỉ bị lọt ra ngoài.
Cuối cùng, hãy đặt quy tắc xóa. Nội dung thư trong môi trường thử nên có thời hạn lưu ngắn và phải bị xóa theo lịch, đừng để nó tích tụ thành một kho dữ liệu không ai quản lý.
Hộp thư tạm thời trên trang này
Nếu bạn chỉ cần vài địa chỉ cho một buổi kiểm thử thủ công, công cụ email tạm thời của trang này làm đúng việc đó mà không cần dựng gì: mỗi lần bấm tạo là một hộp thư riêng, có thể đặt tiền tố theo ý bạn để nhìn là biết hộp thư nào thuộc ca nào. Hộp thư tự làm mới theo chu kỳ ngắn nên bạn không phải bấm làm mới liên tục.
Những hộp thư ở đây chỉ dùng cho kiểm thử, không phải danh tính thật và không được dùng cho tài khoản bạn cần giữ lâu dài; chúng cũng không phải chỗ để chứa dữ liệu của khách hàng. Nếu bạn còn đang cân nhắc giữa một địa chỉ nhận tất cả và một hộp thư riêng cho từng ca, bài so sánh email tạm thời và bí danh giúp bạn chọn theo mục đích sử dụng.
Phần dành cho nhà phát triển
Một hộp thư nhận tất cả là công cụ mạnh, và sức mạnh đó nằm ở chỗ nó nhận mọi thứ. Khi đưa vào hệ thống thử, vài điểm sau nên được chốt bằng văn bản chứ không chỉ bằng trí nhớ của nhóm:
- Bật nhận tất cả chỉ trên tên miền của môi trường thử, và ghi rõ tên miền đó ở một nơi duy nhất để cấu hình không bị lệch.
- Phân loại theo tiền tố. Mỗi nhóm kiểm thử hoặc mỗi ca dùng một tiền tố riêng, để việc tìm lại thư của một ca không phải quét toàn bộ hộp thư.
- Đặt lịch xóa cố định cho hộp thư, và kiểm tra rằng lịch đó thật sự chạy. Một hộp thư nhận tất cả không có ngày xóa sẽ trở thành kho dữ liệu ngoài tầm kiểm soát.
- Tuyệt đối không để thư của môi trường thật đi vào hộp thư thử. Hãy viết một phép kiểm tra cho điều này trong bộ kiểm thử hạ tầng, chứ đừng trông vào việc ai cũng nhớ.
- Không đưa nội dung thư của người thật vào môi trường thử để tiện cho việc tái hiện lỗi. Hãy thay bằng dữ liệu tổng hợp trước khi lưu.
- Nếu nhóm bạn chạy kiểm thử tự động, hãy xem thêm cách thu thư ngay trong môi trường chạy kiểm thử ở bài thu thư trong môi trường tích hợp liên tục: cách đó kín hơn và không phụ thuộc vào một tên miền công khai.
Một điều nữa nên nhớ: cách nhận tất cả không thay thế được việc hiểu luồng thư. Nó chỉ bỏ đi bước tạo hộp thư, chứ không sửa được một luồng vốn đã sai.
Bước tiếp theo
Trước khi bật một tên miền nhận tất cả cho môi trường thử, hãy viết ra ba dòng: tên miền nào, tiền tố nào thuộc nhóm nào, và ai chịu trách nhiệm xóa. Nếu bạn chỉ cần một địa chỉ để bắt đầu, mở công cụ email tạm thời trước đã, rồi hãy quyết định xem quy mô công việc của bạn có thật sự cần một tên miền riêng hay không.