Resend CLI là công cụ dòng lệnh chính thức của Resend, một nền tảng email được xây dựng dành cho các nhà phát triển. Bạn có thể cài đặt nó bằng npm install -g resend-cli hoặc brew install resend/cli/resend, xác thực bằng resend login, và sau đó gửi email, quản lý miền (domain) và tự động hóa hạ tầng email của bạn từ bất kỳ terminal hay pipeline CI/CD nào.
Resend là gì?
Resend là một API email dành cho các nhà phát triển. Bạn kết nối miền của mình, nhận khóa API và bắt đầu gửi các email giao dịch (transactional email) từ ứng dụng của bạn: đặt lại mật khẩu, xác nhận đơn hàng, chuỗi giới thiệu (onboarding sequences), bất cứ thứ gì được kích hoạt theo chương trình.
Vào ngày 13 tháng 3 năm 2026, Zeno Rocha, người sáng lập Resend, đã ra mắt Resend CLI, mang cùng hạ tầng đó đến terminal. CLI có 53 lệnh trên 13 tài nguyên. Nó được viết bằng TypeScript, hoàn toàn mã nguồn mở theo giấy phép MIT, và hoạt động cho ba đối tượng khác nhau:
- Con người: lời nhắc tương tác, đầu ra bảng dễ đọc, lập lịch bằng ngôn ngữ tự nhiên ("tomorrow at 9am" - ngày mai lúc 9 giờ sáng)
- Các tác nhân AI: chế độ xuất JSON, khóa idempotency, phát hiện tác nhân tự động
- Pipeline CI/CD: xác thực bằng biến môi trường, cờ có thể script, mã thoát nhất quán
Cài đặt Resend CLI
Có bốn cách để cài đặt CLI. Hãy chọn cách phù hợp với thiết lập của bạn.
Qua cURL (file thực thi độc lập, không yêu cầu Node.js)
curl -fsSL https://resend.com/install.sh | bash
Thao tác này tải xuống một file thực thi (binary) được biên dịch sẵn cho hệ điều hành của bạn và đưa nó vào biến PATH. Không cần Node.js.
Qua npm
npm install -g resend-cli
Yêu cầu Node.js 20 trở lên. Sau khi cài đặt, hãy xác nhận nó hoạt động:
resend --version
Qua Homebrew (macOS và Linux)
brew install resend/cli/resend
Đây là lựa chọn gọn gàng nhất trên macOS. Homebrew tự động xử lý các bản cập nhật.
Qua PowerShell (Windows)
irm https://resend.com/install.ps1 | iex
Bạn cũng có thể tải xuống các file thực thi .exe trực tiếp từ trang Phát hành trên GitHub.
Để phát triển cục bộ
Nếu bạn muốn đóng góp cho CLI hoặc xây dựng từ mã nguồn, bạn sẽ cần Node.js 20+ và pnpm:
git clone https://github.com/resend/resend-cli.git
cd resend-cli
pnpm install
pnpm build # outputs ./dist/cli.cjs
pnpm build:bin # native binary at ./dist/resend
Xác thực tài khoản của bạn
Chạy resend login để kết nối CLI với tài khoản Resend của bạn:
resend login
Thao tác này sẽ mở trình duyệt của bạn, hướng dẫn bạn tạo khóa API trong bảng điều khiển Resend, và lưu trữ thông tin đăng nhập của bạn cục bộ tại ~/.config/resend/credentials.json với quyền 0600 bị hạn chế.
Đối với các môi trường không tương tác (CI/CD, script), hãy bỏ qua luồng trình duyệt và truyền khóa trực tiếp:
resend login --key re_xxxxxxxxxxxxx
Sau khi được lưu trữ, bạn không cần phải xác thực lại cho mỗi lệnh. CLI sẽ giải quyết khóa API của bạn theo thứ tự sau:
- Cờ (flag)
--api-key(ghi đè mọi thứ) - Biến môi trường
RESEND_API_KEY - Tệp thông tin đăng nhập đã lưu trữ
Đối với pipeline CI, việc đặt RESEND_API_KEY làm biến môi trường bí mật là cách tiếp cận tiêu chuẩn:
RESEND_API_KEY=re_xxx resend emails send --from builds@yourco.com --to dev@yourco.com --subject "Build passed" --text "All tests green."
Hỗ trợ đa tài khoản
Nếu bạn làm việc với nhiều tổ chức hoặc nhóm Resend, CLI cũng xử lý được điều đó. Chuyển đổi giữa các hồ sơ đã lưu mà không cần đăng xuất:
resend auth switch
Hoặc truyền một hồ sơ cụ thể cho một lệnh duy nhất:
resend <command> --profile production
Gửi email đầu tiên của bạn
Lệnh chính để gửi là resend emails send. Tối thiểu, bạn cần địa chỉ người gửi (từ một miền đã xác minh), người nhận, tiêu đề và nội dung.
Gửi một email văn bản thuần túy
resend emails send \
--from "you@yourdomain.com" \
--to recipient@example.com \
--subject "Hello from the CLI" \
--text "This is a test email sent from the Resend CLI."
Gửi một email HTML
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Your order is confirmed" \
--html "<h1>Order confirmed</h1><p>Thanks for your purchase.</p>"
Hoặc trỏ đến một tệp HTML cục bộ:
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Welcome aboard" \
--html-file ./templates/welcome.html
Lên lịch gửi
CLI phân tích các ngày theo ngôn ngữ tự nhiên cùng với các dấu thời gian ISO 8601:
resend emails send \
--from "you@yourco.com" \
--to user@example.com \
--subject "Scheduled check-in" \
--text "Just checking in." \
--schedule "tomorrow at 9am"
Hoạt động với các cụm từ như "in 1 hour" (trong 1 giờ), "next Monday at 3pm" (thứ Hai tới lúc 3 giờ chiều), hoặc một dấu thời gian ISO đầy đủ.
Lấy ID email
Khi được chuyển qua pipe, CLI tự động chuyển sang đầu ra JSON. Chuyển qua jq để lấy ID email cho các thao tác tiếp theo:
EMAIL_ID=$(resend emails send \
--from a@acme.com \
--to b@acme.com \
--subject "Test" \
--text "Hi" | jq -r '.data.id')
echo "Sent email: $EMAIL_ID"
Hủy hoặc cập nhật một email đã lên lịch
resend emails cancel $EMAIL_ID
resend emails update $EMAIL_ID --schedule "next Monday at 10am"
Liệt kê các email gần đây
resend emails list
Gửi hàng loạt tối đa 100 email cùng lúc
Tạo một tệp JSON với một mảng các đối tượng email:
[
{ "from": "you@yourco.com", "to": "alice@example.com", "subject": "Hi Alice", "text": "Hello!" },
{ "from": "you@yourco.com", "to": "bob@example.com", "subject": "Hi Bob", "text": "Hello!" }
]
Sau đó gửi hàng loạt:
resend emails send-batch --file emails.json
Mỗi yêu cầu gửi hàng loạt được tính là một lệnh gọi API đối với giới hạn tốc độ của bạn, mặc dù nó gửi tới 100 email.
Quản lý miền và khóa API
Trước khi bạn có thể gửi email, bạn cần một miền đã xác minh. CLI sẽ hướng dẫn bạn qua toàn bộ vòng đời của miền.
Thêm một miền
resend domains create --name yourdomain.com --region us-east-1
Các khu vực được hỗ trợ: us-east-1, eu-west-1, sa-east-1, ap-northeast-1. Chọn khu vực gần người dùng của bạn nhất để giảm thiểu độ trễ.
Xác minh bản ghi DNS
Sau khi tạo miền, Resend sẽ cung cấp cho bạn các bản ghi DNS để thêm (SPF, DKIM, DMARC). Sau khi bạn đã thêm chúng vào nhà cung cấp DNS của mình, hãy chạy:
resend domains verify --id <domain-id>
Kiểm tra trạng thái cho đến khi nó trả về "verified" (đã xác minh):
resend domains get --id <domain-id>
Cấu hình theo dõi và TLS
resend domains configure --id <domain-id> # Cấu hình tương tác
Bạn có thể bật tính năng theo dõi mở (open tracking), theo dõi nhấp chuột (click tracking) và DKIM tùy chỉnh thông qua lệnh này.
Liệt kê tất cả các miền
resend domains list
Quản lý khóa API
Để bảo mật, hãy tạo các khóa API có phạm vi (scoped API keys) cho từng dịch vụ hoặc môi trường thay vì chia sẻ một khóa ở khắp mọi nơi:
resend api-keys create # Tương tác, cho phép bạn đặt phạm vi theo miền
resend api-keys list
resend api-keys delete --id <key-id>
Các khóa có phạm vi giới hạn những gì mỗi tích hợp có thể làm. Một khóa chỉ dành cho một miền không thể truy cập các miền khác hoặc cài đặt tài khoản của bạn.
Tính năng nâng cao: broadcast, webhook và template
Ngoài việc gửi email cá nhân, Resend CLI còn xử lý ba trường hợp sử dụng chính khác: gửi broadcast hàng loạt, quản lý webhook và các template có thể tái sử dụng.
Broadcasts (Phát sóng)
Broadcast cho phép bạn gửi cùng một email đến một danh sách lớn các liên hệ. Bạn soạn thảo trước, sau đó gửi hoặc lên lịch:
resend broadcasts create # Tạo bản nháp tương tác
resend broadcasts send --id <broadcast-id>
resend broadcasts schedule --id <broadcast-id> --date "next Monday at 10am"
Webhooks
Webhooks cung cấp cho bạn các sự kiện gửi theo thời gian thực: trả lại (bounces), mở (opens), nhấp chuột (clicks), báo cáo spam. CLI xử lý toàn bộ vòng đời:
resend webhooks create # Đăng ký một điểm cuối mới
resend webhooks list
Để phát triển cục bộ, hãy sử dụng lệnh webhooks listen để ủy quyền (proxy) các sự kiện webhook đến localhost của bạn:
resend webhooks listen --forward-to http://localhost:3000/webhooks/resend
Điều này giúp bạn không phải thiết lập ngrok hoặc các công cụ tunneling tương tự. CLI hỗ trợ 17 loại sự kiện bao gồm email.sent, email.delivered, email.bounced, email.opened và email.clicked.
Templates (Mẫu)
Template cho phép bạn tạo HTML email có thể tái sử dụng với các biến động:
resend templates create # Trình tạo template tương tác
Các biến sử dụng cú pháp {{variable_name}} với các giá trị dự phòng. Sau khi được tạo, hãy tham chiếu các template bằng ID khi gửi email.
Liên hệ và đối tượng
Resend có tính năng quản lý liên hệ tích hợp cho email marketing:
resend contacts create --audience-id <id> --email user@example.com --first-name "Alice"
resend contacts list --audience-id <id>
resend contacts update --id <contact-id> --unsubscribed false
Chạy chẩn đoán
Lệnh doctor kiểm tra môi trường của bạn và gắn cờ các vấn đề:
resend doctor
Nó xác minh phiên bản CLI của bạn, tính hợp lệ của khóa API, các miền đã xác minh, và thậm chí phát hiện các tác nhân viết mã AI (Cursor, Claude Desktop, VS Code, OpenClaw).
Sử dụng Resend CLI trong các pipeline CI/CD
CLI được xây dựng để hoạt động tốt trong các môi trường tự động. Một vài mô hình cần biết:
Đầu ra có thể đọc bằng máy
Bất cứ khi nào bạn chuyển đầu ra qua pipe hoặc truyền --json, CLI sẽ chuyển sang JSON có cấu trúc. Không có vòng quay, không có lời nhắc tương tác:
resend emails send --from a@co.com --to b@co.com --subject "Deploy" --text "Done" --json
Cờ --quiet cũng ngăn chặn tất cả đầu ra ngoại trừ JSON:
resend emails list --quiet | jq '.[0].id'
Tự động xác nhận các thao tác phá hủy
Sử dụng --yes để bỏ qua các lời nhắc xác nhận trong các script:
resend api-keys delete --id <key-id> --yes
Ví dụ về GitHub Actions
- name: Send deployment notification
env:
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
run: |
resend emails send \
--from deploys@yourco.com \
--to team@yourco.com \
--subject "Deploy to production: ${{ github.sha }}" \
--text "Deployed commit ${{ github.sha }} to production."
Giới hạn tốc độ
Giới hạn tốc độ của API Resend là 2 yêu cầu mỗi giây, được chia sẻ trên tất cả các khóa API cho nhóm của bạn. Khi gửi hàng loạt, hãy sử dụng send-batch (tối đa 100 email mỗi lần gọi) thay vì lặp qua từng lần gửi riêng lẻ.
Kiểm thử API email của bạn với Apidog
Resend CLI rất tuyệt vời cho việc sử dụng tương tác và các script đơn giản. Tuy nhiên, khi bạn đang xây dựng một backend gọi trực tiếp REST API của Resend, bạn cần một cách để khám phá và kiểm thử các điểm cuối đó trước khi viết mã ứng dụng.
Apidog giải quyết vấn đề đó. Đây là một ứng dụng khách API miễn phí cho phép bạn gửi các yêu cầu HTTP, kiểm tra phản hồi, tổ chức các trường hợp kiểm thử và thiết lập môi trường cho các khóa API và cấu hình khác nhau.
Đây là cách Apidog phù hợp với quy trình tích hợp Resend điển hình:
Nhập đặc tả API của Resend. Resend cung cấp tài liệu tham khảo API tại resend.com/docs. Bạn có thể nhập đặc tả API vào Apidog để có cái nhìn tổng quan có tổ chức về mọi điểm cuối, bao gồm các lược đồ yêu cầu/phản hồi.
Thiết lập môi trường. Trong Apidog, hãy tạo môi trường cho quá trình phát triển và sản xuất. Lưu trữ RESEND_API_KEY của bạn dưới dạng biến môi trường và tham chiếu nó trong các yêu cầu của bạn bằng {{RESEND_API_KEY}}. Chuyển đổi giữa các môi trường chỉ bằng một cú nhấp chuột.
Kiểm thử logic gửi của bạn. Trước khi viết mã để gửi email từ ứng dụng của bạn, hãy chạy điểm cuối POST /emails trong Apidog với payload chính xác của bạn. Xác minh phản hồi, kiểm tra xem ID email có trả về chính xác không và xác nhận hành vi đối với các trường hợp đặc biệt (trường bị thiếu, địa chỉ không hợp lệ, v.v.).
Tự động hóa kiểm thử. Trình chạy kiểm thử của Apidog cho phép bạn xâu chuỗi các lệnh gọi API và xác nhận các giá trị phản hồi. Bạn có thể thiết lập một kiểm thử gửi email thử nghiệm, truy xuất nó bằng ID, sau đó xác minh trạng thái của nó, tất cả mà không cần viết mã kiểm thử.
Điều này giúp phát hiện lỗi tích hợp trước khi chúng xuất hiện trong môi trường sản xuất. Kết hợp với Resend CLI để phát triển cục bộ, bạn có cả một công cụ terminal nhanh chóng và một môi trường kiểm thử API kỹ lưỡng.
Giá của Resend
Bản thân CLI là miễn phí và mã nguồn mở. Giá áp dụng cho nền tảng Resend:
| Gói | Giá | Email hàng tháng | Giới hạn hàng ngày | Thời gian lưu trữ nhật ký |
|---|---|---|---|---|
| Miễn phí | $0/tháng | 3.000 | 100/ngày | 1 ngày |
| Pro | $20/tháng | 50.000 | Không giới hạn | 3 ngày |
| Scale | $90/tháng | 100.000 | Không giới hạn | 7 ngày |
| Enterprise | Tùy chỉnh | Tùy chỉnh | Tùy chỉnh | Tùy chỉnh |
Một vài điều đáng biết về gói miễn phí:
- Giới hạn 100/ngày làm cho nó phù hợp để kiểm thử và các dự án nhỏ, không phù hợp cho lưu lượng truy cập sản xuất.
- Phân tích (theo dõi mở/nhấp chuột) yêu cầu gói trả phí.
- Thời gian lưu trữ nhật ký chỉ là 1 ngày, vì vậy bạn không thể truy xuất trạng thái email cũ sau 24 giờ.
- Giới hạn tốc độ là 2 yêu cầu/giây cho tất cả các gói, được chia sẻ giữa nhóm của bạn.
- Số lượng vượt quá trên các gói trả phí được giới hạn ở mức 5 lần hạn ngạch hàng tháng của bạn để ngăn chặn các hóa đơn không mong muốn.
IP chuyên dụng là một tiện ích bổ sung $30/tháng trên gói Scale, khả dụng khi bạn gửi hơn 500 email/ngày.
Câu hỏi thường gặp
Tôi có cần Node.js để cài đặt Resend CLI không?
Không cần đối với các phương pháp cài đặt bằng cURL hoặc Homebrew, những phương pháp này tải xuống các file thực thi độc lập được biên dịch sẵn. Đường dẫn cài đặt npm yêu cầu Node.js 20+.
Tại sao tôi không thể gửi từ bất kỳ địa chỉ email nào?
Resend yêu cầu một miền đã xác minh. Bạn cần sở hữu miền đó, thêm các bản ghi DNS mà Resend cung cấp (SPF, DKIM, DMARC), và vượt qua bước xác minh. Các nhà cung cấp email miễn phí như Gmail không được hỗ trợ làm địa chỉ người gửi.
Tôi có thể gửi đến bất kỳ địa chỉ email nào trên gói miễn phí không?
Có. Gói miễn phí không hạn chế người nhận. Nó giới hạn bạn ở 3.000 email/tháng với giới hạn 100 email/ngày.
Lập lịch bằng ngôn ngữ tự nhiên hoạt động như thế nào?
CLI phân tích các cụm từ như "tomorrow at 9am" (ngày mai lúc 9 giờ sáng), "in 2 hours" (trong 2 giờ), "next Friday at 3pm" (thứ Sáu tới lúc 3 giờ chiều), hoặc các dấu thời gian ISO 8601 tiêu chuẩn. Thời gian được hiểu theo múi giờ địa phương của hệ thống của bạn trừ khi bạn chỉ định khác.
Điều gì xảy ra khi tôi chuyển đầu ra qua pipe?
CLI phát hiện khi nó được chuyển qua pipe và tự động chuyển sang đầu ra chỉ JSON mà không có vòng quay hoặc lời nhắc. Bạn không cần phải truyền --json một cách rõ ràng.
Tôi có thể sử dụng CLI với nhiều tài khoản Resend không?
Có. Sử dụng resend login nhiều lần để lưu trữ các hồ sơ khác nhau, sau đó resend auth switch để chuyển đổi giữa chúng, hoặc truyền --profile <name> trên bất kỳ lệnh nào để sử dụng một hồ sơ cụ thể.
Resend CLI có phải là mã nguồn mở không?
Có, nó được cấp phép MIT và được lưu trữ tại github.com/resend/resend-cli.
Sự khác biệt giữa --quiet và --json là gì?
Cả hai đều tạo ra đầu ra JSON. --json buộc đầu ra phải là JSON. --quiet ngăn chặn các vòng quay và chỉ báo tiến độ, điều này cũng ngụ ý chế độ JSON. Trên thực tế, chúng hoạt động giống nhau về định dạng đầu ra; --quiet bổ sung loại bỏ tất cả đầu ra không phải dữ liệu.
