-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Rules vi
Từ 1.4.0, SkimMail có thể theo dõi thư đến và hành động: khớp theo người gửi, theo tiêu đề, theo biểu thức chính quy, theo tài khoản nào nhận được thư, hoặc theo một bộ dò mã một lần (OTP) có sẵn — rồi định tuyến một thông báo, bật một toast trong ứng dụng, bắn một push, và/hoặc gắn tag cho thư.
Một trình đọc thư read-first là thứ bạn mở khi bạn muốn mở. Đó là điểm hay của nó, và cũng là vấn đề: lá thư duy nhất không chờ được — mã đăng nhập mà bạn đang ngồi nhìn cái form — lại đến y hệt bốn mươi lá còn lại. Rules là ngoại lệ hẹp cho chuyện đó. Nó không sắp xếp, không xếp thư mục, không trả lời; nó chỉ báo cho bạn biết một loại thư nhất định vừa tới, qua một kênh mà bạn vốn đang nhìn.
Settings ▸ Rules, vai trò operator trở lên. Rules áp dụng cho cả instance chứ không theo từng tài khoản: một rule không có điều kiện scope sẽ áp dụng cho mọi tài khoản bạn sở hữu.
Rules được đánh giá trên server, lúc sync, với từng header thư vừa được chèn mới. Ba hệ quả đi kèm, và cả ba đều hay làm người dùng bất ngờ:
- Chỉ thư mới được đánh giá. Một thư đã nằm trong cơ sở dữ liệu không bao giờ được đánh giá lại, nên viết một rule không làm gì được với thư đã tới trước đó.
- Chỉ thư gần đây được đánh giá. Thư có ngày cũ hơn 48 giờ so với lúc sync bị coi là backfill chứ không phải thư mới tới — nếu không, lần sync đầu tiên của một năm thư sẽ bắn ra một năm thông báo trong một lượt.
- Chỉ có header để dùng. Việc đánh giá diễn ra đúng chỗ dữ liệu header đã sẵn có, trước khi tải bất kỳ nội dung nào. Đó là lý do không có điều kiện "có đính kèm" và không khớp được nội dung thư: cả hai đều không đáng tin ở thời điểm đó.
Nếu tập rule đã lưu không biên dịch được, lần sync đó bỏ qua việc đánh giá và ghi log. Một rule hỏng không bao giờ làm hỏng một lần sync.
Mỗi rule mang một hoặc nhiều điều kiện cùng một toán tử gộp: All conditions hoặc Any condition.
| Điều kiện | Khớp với | Ghi chú |
|---|---|---|
| Sender contains | địa chỉ From | chuỗi con, không phân biệt hoa thường |
| Subject contains | tiêu đề | chuỗi con, không phân biệt hoa thường |
| Regex | tiêu đề hoặc snippet | Go RE2 — thời gian tuyến tính, không có backtracking thảm hoạ |
| Account / group scope | thư đến trên tài khoản nào | danh sách tài khoản và/hoặc group |
| Is OTP | bộ dò có sẵn | không cần nhập giá trị |
Mỗi pattern tối đa 512 ký tự. Biểu thức chính quy được kiểm tra lúc bạn lưu, nên một regex sai bị từ chối ngay tại đó thay vì âm thầm không bao giờ khớp.
Scope là một điều kiện, không phải một thiết lập. Điều này đáng nói to: với Any condition, một điều kiện scope sẽ khiến rule bắn cho mọi thứ từ những tài khoản đó, vì "any" được thoả ngay khi scope khớp. Scope gần như luôn thuộc về một rule dạng All conditions.
Is OTP dùng một bộ dò có sẵn — cùng họ heuristic mà iOS AutoFill dùng —
thay vì một pattern bạn phải tự bảo trì. Nó quét tiêu đề và snippet để tìm mã 4–8
chữ số (có thể bị tách một lần, như 123 456) và chỉ tính khi có một từ khoá
OTP nằm trong vòng 48 ký tự quanh nó. Từ khoá là đa ngôn ngữ: các dạng tiếng
Anh, Việt, Tây Ban Nha, Bồ Đào Nha, Pháp, Hà Lan, Đức, Nhật, Trung, Hàn, Nga và
Thổ Nhĩ Kỳ đều được nhận. Một số bốn chữ số trơ trọi kiểu 2026 bị bỏ qua trừ
khi có từ khoá đứng rất sát, vì "Rewind 2026" trong tiêu đề từng là kiểu dương
tính giả phổ biến nhất.
Bản thân mã không bao giờ được lưu. Chỉ một cờ boolean được ghi vào thư. Mã đi kèm vào payload thông báo và được suy lại lúc render cho nút copy trên chip OTP trong danh sách thư — nó không bao giờ được ghi vào cơ sở dữ liệu, và không bao giờ xuất hiện trong một archive backup.
Việc dò chạy một lần cho mỗi thư, chỉ khi thư được chèn lần đầu.
Một rule khớp có thể làm bất kỳ tổ hợp nào của bốn việc:
-
Notify these channels — gửi một sự kiện
rule_hittới những notification channel bạn chọn. Định tuyến là tường minh theo channel: các channel của một rule không bị lọc bởi công tắc sự kiện Watchtower của channel đó. Chỉ công tắc enabled của chính channel mới có tác dụng. Xem Notifications. - In-app notification (toast) — một toast trong mọi tab SkimMail đang mở, kèm mã OTP và nút copy nếu có.
- Send push notification — một push Web Push / FCM tới các trình duyệt và thiết bị đã đăng ký. Cái này có đi qua chuỗi kiểm soát thông báo thông thường: công tắc tổng, lọc theo tài khoản, quiet hours và các thiết lập hiển thị nội dung đều áp dụng, nên một rule không thể push xuyên qua quiet hours.
- Set tag — ghi một tag duy nhất lên thư đã khớp, rồi bạn lọc theo nó từ inbox. Một tag cho mỗi thư: nếu nhiều rule cùng khớp và nhiều rule cùng đặt tag, rule khớp đầu tiên theo thứ tự danh sách thắng. Từ 1.16.0, một rule có action này còn có thêm nút Backfill ngay trên dòng của nó — xem bên dưới. Xem Tag.
Rules được đánh giá theo thứ tự danh sách và mọi rule khớp đều bắn — đây không phải engine kiểu first-match-wins. Thứ duy nhất theo kiểu first-match là tag.
Có từ 1.16.0. Điều kiện của một rule vẫn chỉ được đánh giá trực tiếp, lúc sync, với thư vừa được chèn mới — không gì phía trên dòng này thay đổi. Nhưng một rule có action Set tag giờ có thêm nút Backfill ngay trên dòng của nó ở Settings ▸ Rules, nên bật một rule lên không còn nghĩa là phải chờ đống thư khớp "tới" lại lần nữa.
- Preview không tốn gì và không đổi gì cả. Backfill trước tiên đếm xem rule đó sẽ gắn tag cho bao nhiêu thư đã lưu — một lượt dry run thật sự, không phải nút báo cáo việc nó vừa làm.
- Nó không bao giờ ghi đè một tag đã có sẵn. Một thư đã mang tag — từ một rule trước đó hay từ chính tay bạn — được đếm riêng, vào mục đã có tag, và để yên.
- Nó không bao giờ gửi thông báo. Áp một rule lên nhiều năm thư đã lưu qua đường hit thông thường sẽ nghĩa là bấy nhiêu thông báo cho thư bạn đã đọc từ lâu; backfill chỉ ghi vào cột tag.
- Một rule đang tắt vẫn preview được, nhưng không apply được. Xem một rule sẽ phủ tới đâu chính là cách bạn quyết định có bật nó không; Apply từ chối cho tới khi bạn bật, và preview nói rõ điều đó.
- Nó không tốn một vòng mạng nào. Việc đánh giá lại đọc tiêu đề, địa chỉ người gửi và snippet đã lưu sẵn, chạy lại bộ dò OTP trên chúng khi rule cần — không có lần fetch IMAP nào, không có migration nào đứng sau chuyện này.
Test trên một rule gửi một rule_hit giả qua các channel mà rule đó định
tuyến, đồng bộ, rồi báo mã trạng thái HTTP và độ trễ khứ hồi của từng channel.
Nó test việc gửi, không test việc khớp: nó không đối chiếu điều kiện của bạn với
thư thật nào cả. Một rule không có channel thì chẳng có gì để test — nút nói
vậy, và toast trong ứng dụng vẫn hoạt động.
| Có từ | 1.4.0 (hành động tag 1.4.1, hành động push 1.5.0, backfill 1.16.0) |
| Vai trò | operator |
| Số rule tối đa | 100 |
| Độ dài pattern | 512 ký tự |
| Độ dài tag | 40 ký tự, đếm theo ký tự chứ không theo byte |
| Cửa sổ đánh giá | thư có ngày trong vòng 48 giờ so với lần sync |
| Trần thông báo | 20 hit mỗi tài khoản mỗi lượt sync |
| Số mẫu preview backfill hiện ra | 5 thư khớp, theo tên |
- Trần thông báo là van chống lũ, và nó im lặng với bạn. Khi một lượt sync của một tài khoản đã tạo ra 20 hit, các hit tiếp theo trong lượt đó không được thông báo; số bị bỏ được ghi vào log. Tag vẫn được áp dụng bất kể trần này — hành động tag chạy trước nó.
- Rules được lưu thành một danh sách duy nhất, không phải từng dòng theo tài khoản, và được dùng chung cho mọi tài khoản trên instance.
- Rule đang tắt vẫn được kiểm tra khi bạn lưu, nên một rule tắt mà có regex hỏng sẽ bị từ chối chứ không được cất đi làm cái bẫy cho sau này.
- Nó không di chuyển, lưu trữ, xếp thư mục hay xoá thư. Không có hành động "move to folder" và không có auto-archive. Rules của SkimMail thông báo và gắn tag; chúng không sắp xếp lại hộp thư của bạn.
- Nó không trả lời, chuyển tiếp hay gửi bất cứ thứ gì. SkimMail hoàn toàn không gửi thư.
- Nó không khớp theo nội dung thư hay theo tệp đính kèm. Lúc đánh giá chỉ có tiêu đề, snippet, người gửi và scope.
- Nó không chạy các action notify/toast/push theo yêu cầu. Những cái đó vẫn chỉ bắn trực tiếp, lúc sync, cho thư mới — không có nút "áp dụng rule cho thư đã có" cho chúng. Chỉ action tag mới backfill được lên thư đã lưu, bằng nút Backfill nói ở trên.
- Nó không chạy theo từng người dùng. Rules áp dụng cho cả instance.
- Nó không phải bộ lọc spam. Mute người gửi mới là công cụ cho việc đó — xem Người gửi mute và VIP.
- Notifications — các channel mà một rule định tuyến tới, và chuỗi kiểm soát push
- Tag — hành động tag ghi gì, gắn tag bằng tay, và eraser (đổi tên / gộp / remove-everywhere)
- Sync và Sync Health — lần sync mà rules chạy bên trong
- Bảo mật — vì sao mã OTP không bao giờ được lưu
SkimMail · skimmail@base101.app · 2026-09-15 · commit 767741a