Yêu cầu trước khi bắt đầu
- Đã xong Bước 4: Cài Lark (cần quyền quản trị viên Lark: người sáng lập tổ chức là đủ)
- Đã xong Bước 6: Tên miền về Cloudflare và đăng nhập được trang quản lý DNS của tên miền
- Python 3.10 trở lên
Các bước
Thêm tên miền vào Lark Mail và chép các bản ghi DNS
Lark Admin → Email → Quản lý Dịch vụ → Quản lý tên miền. Nếu thấy màn "Chào mừng bạn đến với Lark Mail", bấm Thiết lập ngay. Nhập tên miền → Xác nhận → chọn "Trực tiếp kích hoạt dịch vụ email mới". Lark hiện 5 bản ghi, chép nguyên văn:
@TXT —verification-code-site-App_lark=<mã>@TXT —v=spf1 +include:spf.onlarksuite.com -all@MX —mx1.larksuite.com(ưu tiên 1),mx2(5),mx3(10)
Chưa bấm "Xác minh ngay" — sang bước 2 trước.
Khai 5 bản ghi ở nơi quản lý DNS — chỉ THÊM
Nếu tên miền đã có MX/TXT của dịch vụ mail khác (Google, Zoho, mail hosting), dừng lại và hỏi: chuyển sang Lark nghĩa là mail cũ ngừng nhận. Không có thì thêm đủ 5 bản ghi, rồi kiểm ngay bằng lệnh hỏi thẳng máy chủ tên của nơi quản lý DNS:
nslookup -type=MX <tên-miền> <ns1-của-nơi-quản-lý> nslookup -type=TXT <tên-miền> <ns1-của-nơi-quản-lý>
Phải thấy đủ 3 MX larksuite.com và 2 TXT.
Xác minh trên Lark
Quay lại Lark → Xác minh ngay; thường xanh ngay ("Đã xác minh"). Màn kế tiếp bắt "cấu hình email doanh nghiệp cho thành viên" với nút Xác nhận màu xám — bỏ qua, đi thẳng sang Quản lý địa chỉ → Hộp thư công khai. Đừng đổi email chính của ai ở bước này.
Tạo hộp thư công khai
Quản lý địa chỉ → Hộp thư công khai → Tạo: Tên = tên hiển thị bạn muốn khách thấy; Địa chỉ = phần trước @ (ví dụ lienhe); Chọn thành viên = người sẽ gửi thư bằng lark-cli (bắt buộc); IMAP/SMTP để Tắt. Hộp thư công khai hợp cho địa chỉ đại diện (lienhe@, hotro@), nhiều người cùng xem, gửi tự động bằng máy.
Bật DKIM để Gmail/Outlook tin thư
Bảo mật và chống thư rác → Xác thực DKIM → dòng tên miền → Bật → độ dài khoá 2048 → Tiếp. Lark hiện 1 bản ghi TXT tên dạng lark<số>._domainkey với giá trị v=DKIM1; k=rsa; p=…. Thêm vào DNS: tên không kèm tên miền phía sau, giá trị chép nguyên kể cả dấu ;. Kiểm bằng nslookup -type=TXT lark<số>._domainkey.<tên-miền> thấy DKIM1, rồi quay lại Lark bấm Xác minh → trạng thái chuyển "Bật".
Gửi thư từ địa chỉ mới, có tên hiển thị đẹp
Lệnh nhanh lark-cli mail +send gửi được nhưng khách thấy tên người gửi là chữ thường phần trước @ (xem bẫy 2). Cách đúng: dựng thư thô rồi gửi qua API nháp. Claude AI viết giúp bạn đoạn dưới (điền 3 giá trị đầu):
import base64, json, subprocess, os
from email.message import EmailMessage
from email.header import Header
HO_SO = "ho-so-lark-cli" # hồ sơ lark-cli đã đăng nhập (auth login --domain mail)
DIA_CHI = "lienhe@tenmiencuaban.vn" # hộp thư công khai vừa tạo
TEN = "Tên hiển thị của bạn" # tên hiện cạnh địa chỉ khi khách nhận thư
def lark(*args, data=None):
cmd = ["lark-cli.cmd" if os.name == "nt" else "lark-cli", "--profile", HO_SO, *args, "--as", "user"]
if data is not None:
open("_body.json", "w", encoding="utf-8").write(json.dumps(data, ensure_ascii=False))
cmd += ["--data", "@./_body.json"] # lark-cli chỉ nhận đường dẫn tương đối
p = subprocess.run(cmd, capture_output=True, text=True, encoding="utf-8")
out = p.stdout if "{" in p.stdout else p.stderr
return json.loads(out[out.index("{"):])
def gui_thu(den, tieu_de, html):
msg = EmailMessage()
msg["From"] = str(Header(TEN, "utf-8")) + f" <{DIA_CHI}>" # dựng thư thô để có tên hiển thị
msg["To"], msg["Subject"] = den, tieu_de
msg.set_content("Thư này ở dạng HTML.")
msg.add_alternative(html, subtype="html")
raw = base64.urlsafe_b64encode(msg.as_bytes()).decode().rstrip("=")
base = f"/open-apis/mail/v1/user_mailboxes/{DIA_CHI}/drafts"
r = lark("api", "POST", base, data={"raw": raw})
if not r.get("ok"): return r
did = r["data"]["draft"]["id"]
r2 = lark("api", "POST", f"{base}/{did}/send", data={})
if not r2.get("ok"): lark("api", "DELETE", f"{base}/{did}") # gửi hỏng thì xoá nháp
return r2Trên Windows đặt biến môi trường PYTHONUTF8=1 trước khi chạy để in tiếng Việt không lỗi. Chỉ gửi thư thật khi bạn đã xác nhận người nhận và nội dung. Thư thử đầu tiên gửi về chính Gmail của bạn: tên người gửi phải hiện đúng, thư nằm ở Hộp thư đến, không có dấu chấm hỏi cạnh tên.
Đọc thư khách trả lời
Khách bấm Trả lời sẽ về hộp thư công khai. Đọc bằng dòng lệnh:
lark-cli --profile <hồ-sơ> mail +triage --mailbox lienhe@tenmiencuaban.vn --as user --max 20
Muốn đọc ngay trong app Lark, cần cấp cho bạn 1 email doanh nghiệp: Lark Admin → Thành viên và Bộ phận → chọn bạn → Chỉnh sửa → Email doanh nghiệp = ten@tenmiencuaban.vn → Lưu. Đây là thay đổi danh tính Lark của bạn nên hỏi trước khi làm; email đăng nhập không đổi.
Tạo cho tôi hộp thư [ten-hop]@[ten-mien] trên Lark Mail, tên hiển thị "[tên hiển thị]", làm theo trang https://trienkhaimail.truongminhkien.vn/ . Kiểm điều kiện trước (lark-cli đã đăng nhập, Python, tôi là quản trị viên Lark). Nếu tên miền đã có MX của dịch vụ mail khác thì DỪNG và hỏi tôi. Chỉ THÊM bản ghi DNS, không xoá bản ghi đang có. Nếu bạn không gõ được vào trang DNS thì in bảng bản ghi nguyên văn cho tôi gõ tay rồi chỉ kiểm bằng nslookup. Mọi đăng nhập/quét mã tôi tự làm. Chỉ gửi thư thử về Gmail của tôi sau khi tôi xác nhận địa chỉ và nội dung. Ngôn ngữ: tiếng Việt.
⚠ Bẫy đã gặp + cách gỡ
1. Thêm MX thứ hai xong, bảng chỉ còn 1 MX (gặp ở nhà đăng ký Mắt Bão)
Một số nơi gộp các bản ghi cùng tên và cùng loại thành 1 dòng nhiều giá trị: tạo "bản ghi mới" cùng tên sẽ đè bản trước. (Ở iNET thì không bị: mỗi bản ghi 1 dòng riêng.)
Cách gỡ: tạo 1 dòng MX rồi dùng Thêm giá trị trong dòng đó cho mx2, mx3; TXT cũng vậy. Kiểm bằng nslookup sau mỗi lần thêm.
🔴 2. Thư gửi ra hiện tên là "lienhe" chữ thường thay vì tên đẹp
lark-cli mail +send bỏ trống tên người gửi, và đặt --from "Tên <địa chỉ>" thì báo lỗi sender check fail. Tên đặt cho hộp thư trong Lark Admin cũng không đi theo thư.
Cách gỡ: dựng thư thô có dòng From mã hoá tên rồi gửi qua nháp (đoạn mã ở bước 6). Đã kiểm thật: Gmail hiện đúng tên.
3. Danh sách hộp thư của lark-cli rỗng dù đã tạo hộp thư công khai
Tổ chức Lark mới chưa ai có email doanh nghiệp thì lệnh accessible_mailboxes rỗng và profile me trả địa chỉ trống. Việc gửi không bị chặn: hộp thư công khai vẫn gọi được bằng địa chỉ trực tiếp.
Cách gỡ: dùng địa chỉ đầy đủ ở mọi lệnh; hoặc cấp email doanh nghiệp cho bạn (bước 7) — sau đó danh sách liệt kê cả hộp chính lẫn hộp công khai.
4. Lark cảnh báo sẽ xoá dữ liệu email khi gửi tên miền
Nếu thành viên nào đã liên kết email bên thứ ba vào Lark Mail, việc gửi tên miền sẽ hủy liên kết và xoá dữ liệu email liên quan.
Cách gỡ: hỏi chắc trong tổ chức có ai liên kết Gmail/Outlook chưa trước khi tích "Tôi hiểu".
5. AI không gõ được bản ghi vào trang quản lý DNS
Một số công cụ hoặc nhà đăng ký chặn thao tác gõ tự động vào ô nội dung DNS. Đã gặp ở iNET.
Cách gỡ: không thử quá 2 lần; in bảng bản ghi nguyên văn cho bạn gõ tay, AI chỉ kiểm lại bằng nslookup. Đây là cách làm bình thường, không phải thất bại.
6. lark-cli báo thiếu token người dùng
Danh tính "user" của hồ sơ chưa đăng nhập với quyền Mail.
Cách gỡ: chạy lark-cli auth login --domain mail --no-wait --json, mở đường dẫn hoặc quét mã QR, bấm đồng ý, rồi hoàn tất bằng --device-code. Không dùng lại đường dẫn cũ vì hết hạn sau khoảng 10 phút.
7. Lỗi nhỏ nhưng tốn thời gian trên Windows
(a) mail +triage --limit báo "unknown flag": cờ đúng là --max. (b) In tiếng Việt ra console báo UnicodeEncodeError (cp1252): đặt PYTHONUTF8=1. (c) Lệnh .cmd cắt đường dẫn có ký tự &: chạy những lệnh đó qua Git Bash. (d) nslookup hiện TXT dài thành 2 đoạn trong dấu nháy (cắt ở 255 ký tự): so khớp bằng cách ghép các đoạn trong dấu nháy, đừng so từng dòng.
⚠ Chưa kiểm: SPF ở tên miền gốc có ảnh hưởng thư gửi qua dịch vụ khác không
Bản ghi SPF của Lark kết thúc bằng -all. Nếu cùng tên miền đang gửi email qua dịch vụ khác (ví dụ Resend cho email ebook), sau khi xong hãy gửi thử 1 thư từ dịch vụ đó để chắc thư vẫn tới. Chúng tôi chưa chạy phép thử này.
Bước tiếp theo
Đã có hộp thư riêng, sang bước kế tiếp: biến file ghi âm hoặc video (buổi học, cuộc họp) thành chữ ngay trên máy để dùng làm tư liệu.
Sang bước 8: Ghi âm → Chữ →