HTTP API, máy chủ TCP và spamd

HTTP API#

Shell
spamscanner http --port 7832 --token "$SPAMSCANNER_TOKEN"

Nó lắng nghe trên 127.0.0.1 trừ khi --host chỉ định khác. Khi có token, mọi yêu cầu trừ /health đều cần Authorization: Bearer <token>. Hãy đặt nó sau một reverse proxy có TLS trước khi mở ra ngoài máy.

Phương thức và đường dẫnNội dung yêu cầuPhản hồi
GET /health{"ok": true, "version": "7.0.0"}
POST /scanThư thôKết quả quét dưới dạng JSON
POST /checkThư thôThư kèm các header X-Spam-* được thêm vào, dưới dạng message/rfc822
POST /learn/spamThư thô{"ok": true, "learned": "spam"}; cần token
POST /learn/hamThư thô{"ok": true, "learned": "ham"}; cần token

Tham số truy vấn mô tả phiên SMTP:

Tham sốÝ nghĩa
ipĐịa chỉ IP của client
hostnameTên DNS ngược đã xác minh của client
heloTên HELO hoặc EHLO của client
fromNgười gửi trong envelope
toMột người nhận; lặp lại tham số hoặc phân tách nhiều người bằng dấu phẩy
verbose=1/scan: trả về thêm danh sách từ và tiêu đề thư
subjectTag/check: thêm tiền tố vào tiêu đề của spam, ví dụ %5BSPAM%5D

/check cũng trả về X-Spam-Flag, X-Spam-Score và X-Spam-Action dưới dạng header phản hồi, nên client có thể quyết định mà không cần phân tích thư.

Thư lớn hơn 25 MB nhận 413. Lần quét thất bại nhận 500 với {"error": "..."}.

Shell
curl -s -X POST -H "Authorization: Bearer $SPAMSCANNER_TOKEN" \
  --data-binary @message.eml "http://127.0.0.1:7832/scan?ip=203.0.113.5&to=bob@example.org" | jq '.isSpam, .score, .tests'

Với --out model.json, những gì /learn dạy được lưu vào tệp đó sau mỗi yêu cầu. Nếu không có, việc học chỉ kéo dài đến khi máy chủ khởi động lại.

Từ Node.js:

JavaScript
const response = await fetch('http://127.0.0.1:7832/scan?ip=203.0.113.5', {
  method: 'POST',
  headers: {authorization: `Bearer ${process.env.SPAMSCANNER_TOKEN}`},
  body: rawMessage,
});
const {isSpam, score, action} = await response.json();

Từ Python:

Python
import os, urllib.request

request = urllib.request.Request(
    'http://127.0.0.1:7832/scan',
    data=open('message.eml', 'rb').read(),
    headers={'Authorization': f"Bearer {os.environ['SPAMSCANNER_TOKEN']}"},
    method='POST',
)
print(urllib.request.urlopen(request).read().decode())

Máy chủ TCP#

Shell
spamscanner server --port 7830

Gửi thư thô, đóng chiều gửi của kết nối, rồi đọc một dòng JSON:

Shell
nc -N 127.0.0.1 7830 < message.eml

Với --verbose, câu trả lời thay vào đó là một dòng văn bản: SPAM 16.3/5.0 BAYES_999,PHISHING_LOOKALIKE_DOMAIN,DECEPTIVE_LINK,FROM_NAME_BRAND hoặc HAM -2.5/5.0 BAYES_00.

spamd#

Shell
spamscanner spamd --port 783

Một máy chủ tương thích SpamAssassin cho spamc, Exim, Haraka và các client SpamAssassin khác. Thiết lập Exim và Haraka

LệnhPhản hồi
CHECKSpam: True ; 16.3 / 5.0
SYMBOLSKết luận và tên các phép kiểm tra đã kích hoạt
REPORTKết luận và bảng các phép kiểm tra, điểm và lý do
REPORT_IFSPAMNhư REPORT, với báo cáo rỗng cho thư hợp lệ
PROCESSKết luận và thư kèm các header X-Spam-*
HEADERSKết luận và khối header của thư kèm các header X-Spam-*
PINGPONG
SKIPKhông có gì
TELLHọc spam hoặc ham, với --allow-tell; lưu vào --out

Yêu cầu nén (Compress: zlib) bị từ chối.

Sửa trang này trên GitHub · Markdown ·