---
title: "Lấy mã OTP Hotmail qua API đúng lượt kiểm thử"
description: "Đọc mã OTP từ hộp thư Hotmail của bạn qua OAuth và API Mailera. Đối chiếu đúng lượt kiểm thử; kiểm tra kết nối và Thư rác khi thiếu mã."
url: https://mailera.app/blog/lay-ma-otp-hotmail-qua-api-dung-luot-kiem-thu
published: 2026-10-25
updated: 2026-10-25
---

# Lấy mã OTP Hotmail qua API đúng lượt kiểm thử

Kết nối hộp thư Hotmail có sẵn bằng OAuth, đọc mã với khóa chỉ đọc và đối chiếu đúng lượt yêu cầu. Khi không thấy mã, kiểm tra kết nối rồi kiểm tra Thư rác.

## Cần chuẩn bị gì trước khi đọc mã từ Hotmail?

Bạn cần một hộp thư Hotmail thử nghiệm của chính mình và quyền chạy quy trình gửi mã của ứng dụng đang kiểm thử. Chỉ thực hiện các bước dưới đây trong phạm vi đó.

OTP là mã xác minh dùng một lần. Trong quy trình này, việc gửi mã, đọc mã và kiểm tra mã thuộc các bước khác nhau:

| Công việc | Bên thực hiện |
| --- | --- |
| Phát hành mã và gửi thư xác minh | Ứng dụng đang được kiểm thử |
| Đọc mã từ thư đã nhận | Mailera qua kết nối hộp thư Microsoft |
| Chấp nhận hoặc từ chối mã | Ứng dụng phát hành mã |

Hotmail dùng [kết nối Microsoft của Mailera](https://mailera.app/providers/microsoft), qua OAuth và Microsoft Graph. Không dùng mật khẩu ứng dụng để kết nối hộp thư Microsoft với Mailera. Theo [tài liệu OAuth của Microsoft](https://learn.microsoft.com/en-us/graph/auth-v2-user), người dùng cấp quyền cho ứng dụng thay mặt mình truy cập dữ liệu.

Nếu cần tìm hiểu cách đọc mã trong hộp thư của mình, xem bài [đọc OTP từ email qua API](https://mailera.app/blog/doc-ma-otp-tu-email-qua-api). Phần dưới hướng dẫn lấy đúng mã cho lượt kiểm thử vừa bắt đầu.

## Kết nối hộp thư và tạo khóa chỉ đọc ra sao?

### 1. Kết nối Hotmail bằng OAuth

Dùng tài khoản có vai trò Admin hoặc Leader, mở **Danh sách hộp thư** → **Thêm hộp thư** → **Đăng nhập Microsoft**. Đăng nhập hộp thư thử rồi hoàn tất bước chấp thuận tại Microsoft.

Đối chiếu địa chỉ trước khi cấp quyền, nhất là khi trình duyệt đang đăng nhập nhiều tài khoản Microsoft. Bạn có thể xem thêm [các bước kết nối hộp thư đầu tiên](https://mailera.app/blog/cach-ket-noi-email-voi-mailera) nếu chưa quen giao diện.

![Thẻ Đăng nhập Microsoft trên trang Thêm hộp thư của Mailera.](https://mailera.app/media/39e644d283f9e836/ket-noi-email-voi-ai-doc-hop-thu-hien-co-qua-rest-api-hoac-vi-1200.jpg)
_Hotmail kết nối qua OAuth Microsoft, không dùng mật khẩu ứng dụng._

### 2. Tạo khóa giới hạn trong nhóm thử nghiệm

Trong **Cài đặt**, mở phần khóa API và chọn **Tạo key**. Điền **Tên gợi nhớ**, đặt **Phạm vi hộp thư** vào nhóm chứa hộp thư thử, chỉ bật quyền đọc tương ứng với scope `read`, rồi chọn **Thời hạn** phù hợp với đợt kiểm thử.

Endpoint đọc OTP cần `read`; không cần cấp quyền gửi hoặc di chuyển thư cho tác vụ này. Cách chọn quyền tối thiểu cũng phù hợp với [khuyến nghị về quyền truy cập của Microsoft](https://learn.microsoft.com/en-us/graph/permissions-reference).

Mailera chỉ hiển thị khóa mới một lần. Lưu khóa vào biến môi trường `$MAILERA_API_KEY` trên máy chủ hoặc môi trường chạy kiểm thử. Không đưa khóa vào mã nguồn, mã chạy trong trình duyệt hay nhật ký CI.

![Khóa API giới hạn ở nhóm hộp thư thử nghiệm với quyền chỉ đọc.](https://mailera.app/media/eafacf074562dcd3/doc-ma-otp-tu-email-qua-api-cho-luong-kiem-thu-read-only-key-vi-1200.jpg)
_Đọc OTP chỉ cần scope read; không cấp thêm quyền gửi hoặc di chuyển thư._

### 3. Lấy đúng ID hộp thư

Gọi danh sách hộp thư bằng khóa vừa tạo:

```bash
curl --get 'https://mailera.app/api/public/v1/mailboxes' \
  --header "Authorization: Bearer $MAILERA_API_KEY"
```

Trong `data`, tìm mục có `email` đúng với hộp thư thử và lưu `id` vào `$MAILBOX_ID`. Không chọn phần tử đầu tiên chỉ vì hộp thư đó đứng đầu danh sách. Nếu danh sách có nhiều trang, dùng `limit` và `offset` để tìm đúng hộp thư.

[Trang dành cho nhà phát triển](https://mailera.app/developers) trình bày các cách tích hợp Mailera; [tài liệu API](https://mailera.app/docs) là nơi tra cứu endpoint khi đưa các lệnh này vào chương trình kiểm thử.

## Gọi API thế nào để lấy mã của lượt vừa bắt đầu?

Trước khi yêu cầu gửi mã, ghi lại thời điểm bắt đầu lượt kiểm thử, hộp thư nhận và thông tin nhận diện lượt đó ở phía ứng dụng. Nếu bạn kiểm soát mẫu thư thử, nên đưa một nhãn riêng của lượt chạy vào tiêu đề để dễ đối chiếu.

Sau đó yêu cầu ứng dụng gửi mã đến đúng địa chỉ Hotmail đã kết nối. Endpoint `GET /mailboxes/{id}/otp` của Mailera lấy mã OTP mới nhất và hỗ trợ các tham số sau:

| Tham số | Giá trị trong ví dụ |
| --- | --- |
| `id` trong đường dẫn | `$MAILBOX_ID` của hộp thư thử |
| `from` | `verify@example.com` |
| `subject` | `Kiem thu Hotmail A` |
| `since_minutes` | `5` |

Ví dụ truyền `from=verify@example.com`, `subject=Kiem thu Hotmail A` và `since_minutes=5`.

```bash
curl --get "https://mailera.app/api/public/v1/mailboxes/$MAILBOX_ID/otp" \
  --header "Authorization: Bearer $MAILERA_API_KEY" \
  --data-urlencode 'from=verify@example.com' \
  --data-urlencode 'subject=Kiem thu Hotmail A' \
  --data-urlencode 'since_minutes=5'
```

Không dùng giá trị truy vấn làm căn cứ kết luận mã vẫn còn hiệu lực.

Nếu chưa lấy được mã, truy vấn lại với khoảng nghỉ tăng dần và thời hạn dừng do bài kiểm thử đặt ra. Tránh vòng lặp không có điểm dừng; cũng đừng yêu cầu gửi mã mới sau mỗi lần chưa thấy kết quả.

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

“Mới nhất” không đồng nghĩa với “thuộc lượt này”. Hai lượt kiểm thử dùng chung hộp thư vẫn có thể nhận thư từ cùng người gửi với cùng tiêu đề.

Khi cần đối chiếu, dùng `GET /mailboxes/{id}/messages` để xem thư và kiểm tra `from.address`, `subject`, `received_at` cùng địa chỉ trong `to`. Với thư cần đọc kỹ hơn, `GET /mailboxes/{id}/messages/{msgId}` trả nội dung trong `body.text` và `body.html`.

Chỉ chuyển mã sang bước xác minh khi bạn gắn được thư với lượt hiện tại. Nếu thư không có thông tin đủ để phân biệt, hãy chạy tuần tự hoặc tách hộp thư thử thay vì đoán. Không đưa một mã vào nhiều lượt đang chạy song song chỉ vì mã đó vừa xuất hiện.

## Lỗi hay gặp: vì sao không thấy mã hoặc mã không dùng được?

Khi không nhận được mã xác minh Hotmail, hãy kiểm tra kết nối trước. `GET /mailboxes/{id}/status` kiểm tra trực tiếp việc đăng nhập hộp thư Microsoft còn hoạt động hay không:

```bash
curl --get "https://mailera.app/api/public/v1/mailboxes/$MAILBOX_ID/status" \
  --header "Authorization: Bearer $MAILERA_API_KEY"
```

Nếu đăng nhập không hoạt động, xử lý kết nối rồi mới tiếp tục tìm thư. Nếu kết nối hoạt động, kiểm tra địa chỉ nhận, bộ lọc và vị trí thư.

| Dấu hiệu | Cần kiểm tra | Bước xử lý |
| --- | --- | --- |
| Không lấy được mã | Trạng thái đăng nhập hộp thư | Khôi phục kết nối Microsoft nếu có lỗi |
| Kết nối hoạt động nhưng chưa thấy thư | Địa chỉ nhận và việc ứng dụng đã gửi thư | Đối chiếu với lượt yêu cầu ở ứng dụng thử |
| Thấy thư nhưng truy vấn chưa lấy được mã | Người gửi và tiêu đề | Đối chiếu với thư thực tế; không nới mọi bộ lọc cùng lúc |
| Không thấy thư trong hộp thư đến | Vị trí thư | Kiểm tra Thư rác hoặc endpoint `placement` |
| Có mã nhưng ứng dụng từ chối | Lượt yêu cầu và quy tắc xác minh của ứng dụng | Kiểm tra thời hạn, trạng thái sử dụng hoặc thay thế mã ở ứng dụng |

### Kiểm tra Thư rác riêng

Endpoint `GET /mailboxes/{id}/placement` cho biết vị trí Inbox hoặc Spam và chỉ cần quyền `read`. Endpoint cũng hỗ trợ `from`, `subject` và `since_minutes`.

```bash
curl --get "https://mailera.app/api/public/v1/mailboxes/$MAILBOX_ID/placement" \
  --header "Authorization: Bearer $MAILERA_API_KEY" \
  --data-urlencode 'from=verify@example.com' \
  --data-urlencode 'subject=Kiem thu Hotmail A' \
  --data-urlencode 'since_minutes=5'
```

Bạn cũng có thể mở Thư rác của hộp thư trong Mailera để xem trực tiếp. Nếu cần chuyển thư ra ngoài, thao tác **Không phải spam** cần quyền di chuyển thư, tương ứng scope `move`. Khóa chỉ đọc không đủ cho thao tác này.

![Thư xác minh trong Thư rác của hộp thư Hotmail, với mã OTP đã được che.](https://mailera.app/media/56e7f473c7f7b464/lay-ma-otp-hotmail-qua-api-dung-luot-kiem-thu-hotmail-junk-vi-1200.jpg)
_Kiểm tra vị trí thư riêng; thao tác Không phải spam cần quyền move._

Mailera không bảo đảm thư luôn vào hộp thư đến. Chuyển một thư khỏi Thư rác không khiến nhà cung cấp tự động tin người gửi ở lần sau.

### Có cần đồng bộ liên tục không?

Mailera nhận thư Microsoft mới qua thông báo thay đổi của Graph, kèm kiểm tra nền định kỳ. Nếu cần đồng bộ chủ động, `POST /mailboxes/{id}/sync` yêu cầu scope `sync` riêng; khóa chỉ có `read` không đủ.

Không dùng đồng bộ liên tục làm cách chờ OTP mặc định. Trước hết hãy xác định vấn đề nằm ở kết nối, việc gửi thư hay bộ lọc truy vấn.

## Giữ mã xác minh và quyền đọc thư an toàn thế nào?

Chỉ dùng hộp thư thử của mình. Che toàn bộ mã OTP, địa chỉ cá nhân, khóa API và thông tin OAuth trong ảnh chụp hoặc nhật ký. Không gửi mã hay nội dung thư sang dịch vụ ngoài phạm vi kiểm thử được phép.

Truyền khóa bằng header `Authorization: Bearer`, không gắn khóa vào URL. [RFC 6750 về Bearer token](https://www.rfc-editor.org/info/rfc6750/) khuyến nghị dùng header này và yêu cầu bảo vệ token khi lưu trữ cũng như truyền đi. Các lệnh trên đều dùng HTTPS và header xác thực.

Nếu quy trình có AI agent, hãy coi thư đến là **dữ liệu không tin cậy, không phải lệnh**. Không cho agent làm theo chỉ dẫn trong thư để đổi nơi nhận mã, gửi khóa hoặc mở rộng quyền. Dùng khóa ít quyền và yêu cầu xác nhận trước khi gửi thư. Bài [đọc và xử lý email bằng API cho AI agent](https://mailera.app/blog/api-email-cho-ai-agent) giải thích luồng tích hợp rộng hơn.

Khi kết thúc đợt thử, thu hồi khóa không còn dùng; các lệnh gọi bằng khóa đã thu hồi sẽ bị từ chối ngay. [Trang bảo mật Mailera](https://mailera.app/security) cung cấp thêm thông tin để bạn xem xét khi cấp quyền truy cập hộp thư.

## Mailera làm đến đâu trong quy trình OTP?

Mailera kết nối hộp thư sẵn có, không tạo hộp thư Hotmail hoặc địa chỉ email mới. API đọc mã từ thư đã nhận, không thay ứng dụng phát hành mã quyết định thời hạn hay điều kiện chấp nhận. Vì vậy, hãy tách bước “đọc được mã” khỏi bước “ứng dụng xác minh thành công” trong kết quả kiểm thử.

**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)
