---
title: "So sánh công cụ kiểm thử OTP qua email: chọn theo hộp thư"
description: "Cân nhắc Mailera, MailSlurp và Mailosaur theo nhu cầu hộp thư; cách đọc OTP trên Gmail, Outlook có sẵn, tránh mã cũ và kiểm tra thư rác."
url: https://mailera.app/blog/so-sanh-cong-cu-kiem-thu-otp-qua-email
published: 2026-10-25
updated: 2026-10-25
---

# So sánh công cụ kiểm thử OTP qua email: chọn theo hộp thư

Khi cân nhắc Mailera, MailSlurp và Mailosaur, hãy bắt đầu từ nơi nhận thư. Đọc OTP trên Gmail hoặc Outlook của đội thử nghiệm là bài toán khác với cấp địa chỉ riêng cho từng lượt chạy.

## Bạn cần kiểm tra thư đến hay kiểm thử luồng xác thực?

Kiểm tra OTP có đến hộp thư Outlook của đội mình không và kiểm tra ứng dụng có từ chối mã hết hạn không là hai phép thử cần kết quả khác nhau.

Phép thử nhận thư quan sát hộp thư đích: thư đã đến chưa, đến lúc nào, nằm trong Hộp thư đến hay Thư rác. Phép thử xác thực kiểm tra ứng dụng: mã đúng được chấp nhận, mã sai bị từ chối, mã hết hạn hoặc đã dùng không còn hiệu lực. Công cụ đọc thư phục vụ phép thử thứ hai, nhưng không thay ứng dụng quyết định mã hợp lệ.

[Mailera kết nối các hộp thư có sẵn](https://mailera.app/product) vào một giao diện và REST API chung. Chỉ dùng ứng dụng và hộp thư thử nghiệm bạn sở hữu hoặc được phép sử dụng. Bài [hộp thư có sẵn hay hộp thư riêng cho agent](https://mailera.app/blog/email-co-san-hay-hop-thu-rieng-cho-ai) giải thích thêm cách chọn mô hình; ở đây, tiêu chí chính là nhận đúng thư của đúng lượt kiểm thử.

![Luồng từ ứng dụng gửi OTP đến hộp thư thử, đọc thư, đối chiếu lượt chạy và kiểm tra mã trong ứng dụng.](https://mailera.app/media/e57ab3844c40a68a/so-sanh-cong-cu-kiem-thu-otp-qua-email-chon-theo-hop-thu-vi-1200.jpg)
_Đọc được mã chỉ là một bước; ứng dụng vẫn phải kiểm tra mã thuộc đúng phiên và còn hợp lệ._

## So sánh Mailera, MailSlurp và Mailosaur theo tiêu chí nào?

Đừng bắt đầu bằng số lượng tính năng. Hãy viết điều kiện đạt của bộ kiểm thử trước, rồi dùng cùng điều kiện đó khi đánh giá Mailera, MailSlurp và Mailosaur. Bạn có thể tham khảo khung chọn API email theo mô hình hộp thư và bài [so sánh Mailera với AgentMail: hộp thư có sẵn hay hộp thư mới](https://mailera.app/blog/so-sanh-mailera-va-agentmail) để phân biệt hai mô hình trước khi chọn công cụ.

| Tiêu chí | Điều cần yêu cầu ở công cụ | Phạm vi Mailera |
| --- | --- | --- |
| Hộp thư đích | Đọc đúng hộp thư Gmail, Outlook hoặc IMAP đang dùng | Kết nối hộp thư có sẵn qua API chung |
| Địa chỉ cho lượt chạy | Cấp địa chỉ mới nếu bộ kiểm thử cần | Không tạo hộp thư hoặc địa chỉ mới |
| Đọc OTP | Lấy mã và có cách đối chiếu thư gốc | Có `GET /mailboxes/{id}/otp` và API đọc thư |
| Chờ thư | Có thời hạn chờ, kết quả khi hết hạn và cách gọi lại rõ ràng | Có webhook `message.received` để nhận thông báo; bộ kiểm thử vẫn đặt thời hạn chờ |
| Chạy song song | Ghép được thư với từng lượt chạy | Dùng hộp thư đã kết nối và kiểm tra dấu hiệu nhận diện lượt chạy |
| Vị trí thư | Phân biệt Hộp thư đến với Thư rác | Có `GET /mailboxes/{id}/placement` |
| Tích hợp tự động | Đọc thư từ mã kiểm thử hoặc agent | REST API, webhook và công cụ MCP `get_latest_otp` |

Phần API Mailera được mô tả trong [tài liệu API](https://mailera.app/docs); các mẫu phản hồi đọc thư được ghi nhận ngày 25/10/2026.

Khi đánh giá MailSlurp hoặc Mailosaur, hãy yêu cầu một lượt thử đáp ứng đúng nhu cầu của đội: cấp địa chỉ nếu cần, chờ thư đến, rồi chạy đồng thời mà không ghép nhầm mã. Đánh giá từng sản phẩm riêng, không mặc định chúng có cùng mô hình hoặc chỉ làm việc với hộp thư mới.

Nếu bắt buộc phải tạo địa chỉ mới cho mỗi lượt chạy, Mailera không đáp ứng được. Nếu cần đọc OTP trên các hộp thư đã kết nối, bạn có thể thử Mailera.

## Kiểm thử OTP trên hộp thư đã kết nối như thế nào?

### 1. Kết nối hộp thư thử nghiệm

Mở **Danh sách hộp thư → Thêm hộp thư**. Với Outlook hoặc Microsoft 365, chọn **Đăng nhập Microsoft** để kết nối bằng OAuth. [Hướng dẫn kết nối Microsoft](https://mailera.app/providers/microsoft) mô tả luồng này; không dùng mật khẩu ứng dụng cho kết nối Microsoft trong Mailera.

Luồng [kết nối Gmail](https://mailera.app/providers/gmail) dùng mật khẩu ứng dụng (app password). Theo [tài liệu mật khẩu ứng dụng của Google](https://support.google.com/accounts/answer/185833), đọc ngày 25/10/2026, tài khoản phải bật xác minh 2 bước. Google cũng thu hồi mật khẩu ứng dụng khi bạn đổi mật khẩu tài khoản.

Kết quả cần kiểm tra: hộp thư kết nối thành công và thư thử xuất hiện trong **Hộp thư chung**. Đừng bắt đầu bằng một lượt kiểm thử đầy đủ nếu kết nối nhận thư còn lỗi.

![Hộp thư chung của Mailera hiển thị thư thử từ nhiều hộp thư đã kết nối, với dữ liệu nhạy cảm được che.](https://mailera.app/media/4e7f5838ada9eca5/doc-ma-otp-tu-email-qua-api-de-kiem-thu-xac-minh-otp-vi-1200.jpg)
_Kiểm tra hộp thư nguồn và vị trí thư trước khi dùng mã trong lượt kiểm thử._

### 2. Tạo khóa chỉ để đọc

Trong **Cài đặt**, mở phần khóa API và chọn **Tạo key**. Đặt **Phạm vi hộp thư** vào nhóm thử nghiệm, chỉ cấp quyền đọc (scope `read`), rồi lưu khóa vào nơi quản lý bí mật của CI. Khóa chỉ hiển thị một lần.

Đặt khóa vào biến môi trường `$MAILERA_API_KEY`; không ghi khóa trực tiếp vào mã nguồn. Dùng chính khóa này gọi `GET /mailboxes` với header `Authorization: Bearer $MAILERA_API_KEY`. Trong mảng `data`, đối chiếu trường `email` để chọn đúng hộp thư thử, rồi lấy trường `id` của hộp thư đó làm `$MAILBOX_ID`. Không dùng địa chỉ email hoặc ID chép từ ví dụ thay cho ID hộp thư.

Nếu không tìm thấy hộp thư thử, kiểm tra hộp thư đã kết nối và thuộc nhóm trong **Phạm vi hộp thư** của khóa trước khi tiếp tục. Giữ nguyên cặp khóa và ID này cho các bước đọc thư. Phần [API dành cho nhà phát triển](https://mailera.app/developers) trình bày cách tích hợp REST API.

### 3. Ghi nhận lượt chạy trước khi yêu cầu gửi mã

Ghi thời điểm bắt đầu, hộp thư nhận và dấu hiệu nhận diện lượt chạy. Nếu bạn kiểm soát ứng dụng thử nghiệm, hãy thêm dấu hiệu riêng vào tiêu đề hoặc nội dung thư.

Sau đó mới yêu cầu ứng dụng gửi OTP. Bạn cần đủ thông tin để phân biệt thư mới với thư của lần thử trước; chỉ một địa chỉ người gửi chung là chưa đủ.

### 4. Lấy mã với phạm vi đủ hẹp

`GET /mailboxes/{id}/otp` dùng quyền `read` và có các tham số `from`, `subject`, `since_minutes`. Dùng `$MAILBOX_ID` đã chọn ở bước 2 cho `{id}`, cùng khóa đã dùng để liệt kê hộp thư. Chọn người gửi, tiêu đề và khoảng thời gian phù hợp với lượt chạy. Đừng coi thao tác lấy mã mới nhất là cơ chế tự ghép thư với mọi lượt chạy song song.

Bạn cũng có thể tìm thư kèm mã trích xuất qua `GET /messages/search`: đặt `mailbox` bằng `$MAILBOX_ID`, `q` bằng từ xuất hiện trong thư thử và `extract=otp`. Kết quả tìm kiếm có thể chứa `otp.code` và `otp.source` cùng thông tin thư. Một từ tìm kiếm chung và `limit=1` chưa đủ để nhận diện một lượt chạy; vẫn cần đối chiếu thư gốc.

### 5. Đối chiếu thư trước khi dùng mã

Dùng `GET /mailboxes/{id}/messages` để xem danh sách thư. Kiểm tra `from.address`, `subject`, `received_at` và `folder`, rồi lấy `id` của thư cần đọc làm `$MESSAGE_ID`:

```bash
curl "https://mailera.app/api/public/v1/mailboxes/$MAILBOX_ID/messages/$MESSAGE_ID" \
  -H "Authorization: Bearer $MAILERA_API_KEY"
```

Nội dung nằm trong `body.text` và `body.html`. Chỉ chuyển mã sang bước xác thực sau khi thư khớp với lượt chạy. Bài [đọc OTP từ hộp thư của mình](https://mailera.app/blog/doc-ma-otp-tu-email-qua-api) đi sâu hơn vào tác vụ đọc mã.

### 6. Kiểm tra kết quả ở ứng dụng

Nhập mã vào ứng dụng thử nghiệm và kiểm tra kết quả xác thực. Tách riêng các ca mã đúng, mã sai, hết hạn và dùng lại. Trong nhật ký CI, lưu trạng thái ca kiểm thử và dấu hiệu nhận diện lượt chạy, không lưu mã OTP.

## Những lỗi hay gặp khi lấy OTP tự động

### Lấy mã cũ hoặc mã của lượt chạy khác

Thu hẹp thời gian tìm kiếm và đối chiếu thời điểm nhận thư với thời điểm bắt đầu. “Mã mới nhất” không đồng nghĩa với “mã của lượt này” khi nhiều yêu cầu cùng gửi đến một hộp thư.

Nếu không có dấu hiệu ghép thư đáng tin cậy, hãy tách các hộp thư thử nghiệm sẵn có hoặc chạy tuần tự. Không dùng bộ lọc người gửi làm cách phân biệt duy nhất: các lượt chạy có thể cùng nhận thư từ một ứng dụng.

### Không thấy thư: kiểm tra gì trước?

Kiểm tra trạng thái kết nối trước, rồi kiểm tra cả Hộp thư đến và Thư rác. `GET /mailboxes/{id}/status` kiểm tra đăng nhập trực tiếp với Microsoft; với nhà cung cấp khác, kết quả dựa trên lần đồng bộ gần nhất.

`GET /mailboxes/{id}/placement` giúp xem thư vào Inbox hay Spam. Khi đọc danh sách thư, đối chiếu `folder` và `received_at`. Bài [không nhận được email xác minh](https://mailera.app/blog/khong-nhan-duoc-email-xac-minh) hướng dẫn kiểm tra tình huống này.

Mailera điều chỉnh tần suất kiểm tra nền theo mức sử dụng; hộp thư không hoạt động có thể ngủ. Nếu cần gọi `POST /mailboxes/{id}/sync`, tác vụ đó cần quyền `sync` riêng. Không thêm quyền này vào khóa đọc nếu quy trình không cần.

Với Microsoft, Mailera nhận thư mới qua thông báo thay đổi của Graph và có kiểm tra nền dự phòng. [Tài liệu tài nguyên message của Microsoft Graph](https://learn.microsoft.com/en-us/graph/api/resources/message?view=graph-rest-1.0) mô tả khả năng đăng ký thông báo thay đổi. Cơ chế này không phải cam kết OTP đến tức thì.

### Gọi lại liên tục hoặc quy mọi lỗi cho thư

Bạn có thể dùng webhook `message.received` để kích hoạt bước đọc thư thay vì chỉ gọi API lặp lại. Mailera cũng hỗ trợ sự kiện `message.junk`. Khi nhận thông báo, bộ kiểm thử vẫn cần đối chiếu thư với lượt chạy trước khi dùng mã.

Đặt thời hạn chờ ở phía bộ kiểm thử dù dùng webhook hay gọi lại API. Nếu gọi lại, đặt khoảng nghỉ giữa các lần gọi. Mailera có giới hạn 300 yêu cầu mỗi phút trên mỗi khóa API; cần tính cả các lượt chạy dùng chung khóa.

Nếu đã tìm đúng thư nhưng mã bị từ chối, hãy kiểm tra trạng thái phiên xác thực, thời hạn mã và việc mã đã được dùng hay chưa. Tiếp tục đọc lại cùng thư không sửa được lỗi xác thực ở ứng dụng.

## Bảo vệ mã OTP và quyền đọc thư

Nên dùng hộp thư riêng cho kiểm thử thay vì hộp thư cá nhân chứa dữ liệu thật. Không đưa khóa API, nội dung thư đầy đủ hoặc mã OTP vào nhật ký CI, ảnh chụp hay báo cáo lỗi. Xem thêm [thông tin bảo mật của Mailera](https://mailera.app/security) khi thiết kế quyền truy cập.

Nếu dùng AI agent, coi thư đến là dữ liệu không tin cậy, không phải lệnh. Agent phải bỏ qua nội dung yêu cầu đổi tác vụ, tiết lộ bí mật hoặc gửi dữ liệu đi nơi khác. Tác vụ đọc OTP chỉ cần quyền `read`; nếu mở rộng sang gửi thư, yêu cầu xác nhận trước khi gửi.

## Khi nào nên chọn Mailera, khi nào cần mô hình khác?

Chọn Mailera khi yêu cầu chính là quan sát và đọc OTP trên các hộp thư đã có qua một API chung. Khi đánh giá MailSlurp và Mailosaur cho môi trường kiểm thử riêng, ưu tiên khả năng đáp ứng điều kiện cấp địa chỉ, chờ thư và tách lượt chạy của đội bạn.

Bạn có thể thiết kế hai lớp kiểm thử: một lớp kiểm tra luồng xác thực trong môi trường cô lập, một lớp kiểm tra thư đến hộp thư Gmail hoặc Outlook của đội. Mỗi lớp nên có tiêu chí đạt riêng.

Mailera không quyết định chính sách lọc thư của nhà cung cấp. Kéo thư khỏi Spam không làm nhà cung cấp tự tin cậy người gửi ở lần sau. Kết quả đọc mã còn phụ thuộc quá trình gửi, nhận và đồng bộ thư; ứng dụng xác thực vẫn chịu trách nhiệm kiểm tra tính hợp lệ của mã.

**Làm điều này bằng API** — Mọi thao tác trong bài đều có REST API kèm ví dụ curl, khoá API và webhook. [Xem tài liệu API](https://mailera.app/docs)
