Cách cập nhật Refresh Token cho Hotmail và Outlook: Hướng dẫn Graph, IMAP và POP3 OAuth2

Dang 8 thg 9, 20260 phut docCap nhat 8 thg 9, 2026So luong xem 2

Bài viết này giải thích cách hoạt động của mã làm mới cho tài khoản Hotmail/Outlook, vì sao nó quan trọng khi nhận email qua Microsoft Graph, IMAP và POP3 OAuth2, cũng như cách cập nhật mã làm mới trước khi hết hạn. Nội dung bao gồm ví dụ Python cho một tài khoản và cập nhật hàng loạt tài khoản, phù hợp với người dùng cần mua tài khoản Hotmail số lượng lớn, tài khoản Outlook giá sỉ, nhận mã xác minh email và quản lý email tự động.

Refresh Token là một phần quan trọng trong quá trình nhận email Hotmail và Outlook bằng OAuth2. Nếu bạn sử dụng Microsoft Graph, IMAP OAuth2 hoặc POP3 OAuth2 để đọc email, Refresh Token giúp duy trì quyền truy cập và yêu cầu Access Token tạm thời mới khi cần.

Refresh Token của tài khoản Hotmail/Outlook thường có hiệu lực trong 90 ngày kể từ khi được tạo, vì vậy nên cập nhật trước khi hết hạn.

Đối với người dùng mua tài khoản Hotmail số lượng lớn, mua tài khoản Outlook giá sỉ, nhận email xác minh hoặc quản lý nhiều tài khoản email bằng tự động hóa, việc cập nhật Refresh Token đúng thời điểm có thể giảm gián đoạn đăng nhập và cải thiện độ ổn định khi nhận email lâu dài.

Nội dung bài viết

  1. Refresh Token là gì?

  2. Graph, IMAP và POP3 sử dụng token như thế nào?

  3. Khi nào cần cập nhật Refresh Token?

  4. Cách cập nhật Refresh Token

  5. Ví dụ Python cập nhật một tài khoản

  6. Ví dụ Python cập nhật hàng loạt tài khoản

  7. Phần mềm nhận thư bên thứ ba và tự động cập nhật token

  8. Lưu ý quan trọng trước khi cập nhật token

1. Refresh Token là gì?

Mã làm mới (Refresh Token) là thông tin ủy quyền dài hạn được sử dụng trong OAuth2.0.

Nói đơn giản, mật khẩu dùng để xác nhận thông tin đăng nhập tài khoản, còn Refresh Token dùng để duy trì quyền truy cập đã được ủy quyền cho việc nhận email. Khi chương trình đọc email qua Graph, IMAP OAuth2 hoặc POP3 OAuth2, nó sẽ dùng Refresh Token và Client ID để lấy mã truy cập tạm thời.

Mã truy cập (Access Token) có thời gian sử dụng ngắn. Nó được dùng cho yêu cầu truy cập email cụ thể. Refresh Token có thời gian hiệu lực dài hơn và có thể dùng để lấy Access Token mới khi cần, miễn là Refresh Token vẫn còn hiệu lực.

Các tài khoản Hotmail007 hỗ trợ nhận email bằng token thường được cung cấp theo định dạng:

email:password:refreshToken:clientId

2. Graph, IMAP và POP3 sử dụng token như thế nào?

Graph, IMAP và POP3 là các cách khác nhau để nhận email Hotmail/Outlook.

Graph là API hiện đại của Microsoft để truy cập dữ liệu Outlook, bao gồm email, thư mục và nội dung hộp thư. Graph thường được dùng để đọc email chứa mã xác minh, nhận thư tự động, quản lý hàng loạt tài khoản Hotmail/Outlook và tích hợp vào hệ thống riêng.

IMAP và POP3 là các giao thức nhận email truyền thống. Khi sử dụng OAuth2.0 với IMAP hoặc POP3, chương trình cũng cần Access Token để xác thực kết nối.

Logic chính rất đơn giản:

  • Refresh Token dùng để duy trì quyền ủy quyền;

  • Access Token dùng cho yêu cầu truy cập email thực tế;

  • Graph, IMAP và POP3 sử dụng các Access Token khác nhau;

  • tài khoản có dùng được Graph, IMAP hoặc POP3 hay không phụ thuộc vào loại tài khoản và chức năng đã được hỗ trợ.

Nếu tài khoản Hotmail/Outlook chỉ hỗ trợ Graph, tài khoản đó không thể dùng để đăng nhập IMAP. Nếu tài khoản hỗ trợ cả IMAP và Graph, Refresh Token mới nhất còn hiệu lực có thể được dùng để lấy Access Token phù hợp với phương thức nhận email được hỗ trợ.

3. Khi nào cần cập nhật Refresh Token?

Refresh Token của tài khoản Hotmail/Outlook thường có hiệu lực trong 90 ngày kể từ khi được tạo, vì vậy nên cập nhật trước khi hết hạn.

Bạn nên cập nhật Refresh Token trong các trường hợp sau:

  • token sắp hết hạn;

  • cần nhận email tự động trong thời gian dài;

  • đang quản lý nhiều tài khoản Hotmail hoặc Outlook;

  • script hoặc hệ thống của bạn dùng Graph, IMAP hoặc POP3 OAuth2;

  • cần nhận email chứa mã xác minh một cách ổn định.

Nếu Refresh Token đã hết hạn hoặc bị thu hồi, quá trình cập nhật có thể thất bại. Khi đó, bạn cần token hợp lệ mới hoặc thông tin ủy quyền tài khoản mới.

4. Cách cập nhật Refresh Token

Khi yêu cầu Access Token, hãy thêm offline_access vào scope. Nếu yêu cầu thành công và phản hồi có trường refresh_token mới, bạn cần lưu lại token mới này.

Đối với nhận email qua Graph, scope thường dùng là:

https://graph.microsoft.com/.default offline_access

Đối với IMAP OAuth2:

https://outlook.office.com/IMAP.AccessAsUser.All offline_access

Đối với POP3 OAuth2:

https://outlook.office.com/POP.AccessAsUser.All offline_access

Scope cho biết loại Access Token cần dùng trong tình huống hiện tại. Điều này không có nghĩa là người dùng phải tự lưu nhiều Refresh Token khác nhau.

Sau khi cập nhật thành công, hãy lưu lại toàn bộ dòng tài khoản mới. Trong dòng này, Refresh Token cũ đã được thay bằng Refresh Token mới. Khi tiếp tục nhận email, cập nhật token lần sau hoặc nhập vào công cụ bên thứ ba, nên sử dụng dòng tài khoản mới nhất.

5. Ví dụ Python cập nhật một tài khoản

Ví dụ này cập nhật Refresh Token cho một tài khoản Hotmail/Outlook và in ra dòng tài khoản đầy đủ mới.

import requests

TOKEN_ENDPOINT = "https://login.microsoftonline.com/consumers/oauth2/v2.0/token"
DEFAULT_SCOPE = "https://graph.microsoft.com/.default offline_access"


def parse_account(account_line):
    parts = account_line.strip().split(":")
    if len(parts) < 4:
        raise ValueError("Expected format: email:password:refreshToken:clientId")

    email = parts[0]
    password = parts[1]
    client_id = parts[-1]
    refresh_token = ":".join(parts[2:-1])

    return email, password, refresh_token, client_id


def update_refresh_token(refresh_token, client_id, scope=DEFAULT_SCOPE):
    response = requests.post(
        TOKEN_ENDPOINT,
        data={
            "client_id": client_id,
            "grant_type": "refresh_token",
            "refresh_token": refresh_token,
            "scope": scope,
        },
        timeout=30,
    )

    result = response.json()

    if response.status_code != 200:
        raise RuntimeError(result)

    new_refresh_token = result.get("refresh_token")
    if not new_refresh_token:
        raise RuntimeError("No new refresh_token returned. Please check scope and account status.")

    return new_refresh_token, result.get("expires_in")


def main():
    account = "email:password:refreshToken:clientId"

    email, password, old_refresh_token, client_id = parse_account(account)
    new_refresh_token, expires_in = update_refresh_token(old_refresh_token, client_id)

    updated_account = f"{email}:{password}:{new_refresh_token}:{client_id}"

    print("New account line:")
    print(updated_account)
    print("Access token expires in:")
    print(expires_in)


if __name__ == "__main__":
    main()

Sau khi chạy code, hãy lưu toàn bộ dòng hiển thị dưới New account line. Dòng này đã chứa Refresh Token mới.

6. Ví dụ Python cập nhật hàng loạt tài khoản

Nếu bạn quản lý nhiều tài khoản Hotmail/Outlook, có thể đặt tất cả vào một file và cập nhật token hàng loạt.

Tạo file:

email_accounts_to_update.txt

Mỗi dòng là một tài khoản:

email1:password:refreshToken:clientId
email2:password:refreshToken:clientId
email3:password:refreshToken:clientId

Sau đó sử dụng đoạn Python sau:

from concurrent.futures import ThreadPoolExecutor, as_completed
from pathlib import Path
import time

import requests

TOKEN_ENDPOINT = "https://login.microsoftonline.com/consumers/oauth2/v2.0/token"
DEFAULT_SCOPE = "https://graph.microsoft.com/.default offline_access"

INPUT_FILE = Path("email_accounts_to_update.txt")
MAX_WORKERS = 10
RETRY_TIMES = 3


def parse_account(account_line):
    parts = account_line.strip().split(":")
    if len(parts) < 4:
        raise ValueError("Expected format: email:password:refreshToken:clientId")

    email = parts[0]
    password = parts[1]
    client_id = parts[-1]
    refresh_token = ":".join(parts[2:-1])

    return email, password, refresh_token, client_id


def request_new_refresh_token(refresh_token, client_id, scope=DEFAULT_SCOPE):
    last_error = None

    for attempt in range(1, RETRY_TIMES + 1):
        try:
            response = requests.post(
                TOKEN_ENDPOINT,
                data={
                    "client_id": client_id,
                    "grant_type": "refresh_token",
                    "refresh_token": refresh_token,
                    "scope": scope,
                },
                timeout=30,
            )

            result = response.json()

            if response.status_code == 200 and result.get("refresh_token"):
                return result["refresh_token"]

            last_error = result

        except Exception as error:
            last_error = str(error)

        if attempt < RETRY_TIMES:
            time.sleep(attempt * 2)

    raise RuntimeError(last_error)


def update_account(account_line):
    email, password, old_refresh_token, client_id = parse_account(account_line)
    new_refresh_token = request_new_refresh_token(old_refresh_token, client_id)
    return f"{email}:{password}:{new_refresh_token}:{client_id}"


def main():
    account_lines = [
        line.strip()
        for line in INPUT_FILE.read_text(encoding="utf-8").splitlines()
        if line.strip()
    ]

    updated_accounts = []
    failed_accounts = []

    with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
        tasks = {
            executor.submit(update_account, account): account
            for account in account_lines
        }

        for task in as_completed(tasks):
            original_account = tasks[task]
            try:
                updated_accounts.append(task.result())
            except Exception as error:
                failed_accounts.append(f"{original_account} | {error}")

    updated_file = Path(f"email_accounts_updated_{len(updated_accounts)}.txt")
    failed_file = Path(f"email_accounts_failed_{len(failed_accounts)}.txt")

    updated_file.write_text("\n".join(updated_accounts), encoding="utf-8")
    failed_file.write_text("\n".join(failed_accounts), encoding="utf-8")

    print(f"Total: {len(account_lines)}")
    print(f"Updated: {len(updated_accounts)}")
    print(f"Failed: {len(failed_accounts)}")
    print(f"Updated file: {updated_file}")
    print(f"Failed file: {failed_file}")


if __name__ == "__main__":
    main()

Tên file kết quả sẽ chứa số lượng tài khoản được cập nhật thành công. Ví dụ:

email_accounts_updated_98.txt
email_accounts_failed_2.txt

File tài khoản đã cập nhật có thể dùng cho việc nhận email tiếp theo, bảo trì token hoặc nhập vào hệ thống của bạn.

7. Phần mềm nhận thư bên thứ ba và tự động cập nhật token

Một số phần mềm nhận email bên thứ ba có thể tự động cập nhật token sau khi bạn nhập tài khoản. Trong trường hợp này, phần mềm có thể lấy Access Token mới mỗi khi đọc email, và nếu phản hồi trả về Refresh Token mới, phần mềm sẽ lưu lại trong hệ thống của nó.

Vì vậy, người dùng có thể không nhìn thấy token thay đổi thủ công. Việc này có thể đã được xử lý tự động bên trong phần mềm.

Hotmail007 cũng dự kiến ra mắt phần mềm nhận email miễn phí. Sau khi nhập tài khoản, phần mềm có thể nhận email và cập nhật token ở chế độ nền. Nếu có Refresh Token mới được trả về, token đó sẽ được lưu trong hệ thống của phần mềm nhận thư, giúp người dùng không cần tự cập nhật token mỗi lần.

8. Lưu ý quan trọng trước khi cập nhật token

Trước khi cập nhật token Hotmail/Outlook, hãy kiểm tra các điểm sau:

  • dòng tài khoản phải đầy đủ;

  • Refresh Token và Client ID phải thuộc cùng một tài khoản;

  • loại tài khoản phải hỗ trợ phương thức nhận email bạn muốn dùng;

  • tài khoản chỉ hỗ trợ Graph không thể dùng để đăng nhập IMAP;

  • sau khi cập nhật thành công, hãy sử dụng dòng tài khoản mới nhất;

  • không công khai Refresh Token;

  • nếu cập nhật thất bại, hãy kiểm tra trạng thái tài khoản, thời hạn token, scope và môi trường mạng.

Đối với tài khoản Hotmail số lượng lớn, tài khoản Outlook giá sỉ, nhận email mã xác minh và quản lý hộp thư tự động, nên cập nhật token trước khi hết hạn thay vì đợi đến khi nhận email bị lỗi.

Kết luận

Việc cập nhật Refresh Token cho Hotmail/Outlook rất quan trọng đối với quá trình nhận email dài hạn qua Graph, IMAP và POP3 OAuth2. Quy tắc chính rất đơn giản: dùng Refresh Token và Client ID để yêu cầu Access Token mới, thêm offline_access khi cập nhật, và lưu Refresh Token mới nếu nó được trả về trong phản hồi.

Đối với người dùng cần mua tài khoản Hotmail số lượng lớn, tài khoản Outlook giá sỉ, nhận email qua Graph, IMAP OAuth2, POP3 OAuth2 hoặc tự động đọc email chứa mã xác minh, cập nhật token đúng thời điểm sẽ giúp việc quản lý tài khoản ổn định hơn.

Bai viet lien quan

Huong dan nay co ich khong?

Ve danh sach bai

Bắt đầu bản dùng thử chuyên nghiệp

Hotmail007 cung cấp tài khoản Hotmail và Outlook với giá rẻ và dịch vụ tốt. Mua số lượng lớn sẽ tiết kiệm hơn và có nhiều loại tài khoản để chọn.

H
Hotmail007

Chào mừng đến với Hotmail007! Chúng tôi cung cấp dịch vụ mua tài khoản Hotmail và Outlook với giá rẻ và chất lượng tốt. Mua số lượng lớn càng tiết kiệm hơn. Nhiều loại email Hotmail và Outlook để bạn lựa chọn theo nhu cầu.

©2026 - copyright