Đọc báo cáo DMARC API
Chuyển báo cáo DMARC tổng hợp (XML, .zip, .gz từ Google, Microsoft, Yahoo) thành JSON: nguồn gửi theo IP, căn chỉnh SPF / DKIM, tỷ lệ đạt và gợi ý.
Các nhà cung cấp hộp thư gửi báo cáo DMARC tổng hợp (RUA) dưới dạng file XML, thường được nén zip hoặc gzip. Tải lên một hoặc nhiều file (file, file2…, tối đa 50 file hoặc 200 báo cáo, file ZIP có thể chứa nhiều báo cáo) hoặc dán nội dung XML. API đọc được cả định dạng RFC 7489 và định dạng tổng hợp mới của DMARCbis (namespace dmarc-2.0, có np, testing và discovery_method), trả về đơn vị gửi báo cáo, mã báo cáo, khoảng thời gian, chính sách đã công bố và từng bản ghi: IP nguồn, số thư, cách xử lý, kết quả DKIM và SPF do bên nhận đánh giá, lý do ghi đè, địa chỉ From / envelope và kết quả DKIM / SPF gốc kèm kiểm tra căn chỉnh của chúng tôi.
Sau đó mọi báo cáo được tổng hợp: tổng số thư, số đạt / không đạt DMARC và tỷ lệ, tỷ lệ DKIM và SPF căn chỉnh, cách xử lý, tổng theo tên miền From, và danh sách nguồn gửi xếp theo số lượng kèm tỷ lệ đạt, tên miền và selector DKIM, tên miền SPF. failing_sources liệt kê các IP có thư không đạt, còn advice đưa ra bước tiếp theo dễ hiểu (khai báo nguồn gửi hợp lệ, thêm DKIM vì SPF hỏng khi chuyển tiếp thư, chuyển từ p=none lên quarantine khi trên 98% thư đạt).
Với enrich=true, 50 nguồn gửi lớn nhất được tra thêm tên miền ngược (PTR) và, nếu có, số ASN / đơn vị sở hữu mạng. Đặt include_records=false để có kết quả gọn. Báo cáo chỉ được xử lý trong bộ nhớ, không lưu lại.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
file | body | file | không | File báo cáo: .xml, .xml.gz, .gz hoặc .zip (thêm file2… cho nhiều file). | |
xml | body | string | không | Nội dung XML của báo cáo (hoặc gửi body XML thô). | |
enrich | body | boolean | không | false | Tra PTR và ASN cho 50 IP nguồn lớn nhất. |
include_records | body | boolean | không | true | Trả về từng bản ghi của mỗi báo cáo. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/dmarc-report" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/xml" \
--data-binary '<feedback>…<policy_published><domain>example.vn</domain><p>none</p>…</policy_published><record>…</record></feedback>'const res = await fetch('https://apibox.io.vn/v1/dmarc-report', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/xml',
},
body: "<feedback>…<policy_published><domain>example.vn</domain><p>none</p>…</policy_published><record>…</record></feedback>",
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/dmarc-report",
headers={"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/xml"},
data="<feedback>…<policy_published><domain>example.vn</domain><p>none</p>…</policy_published><record>…</record></feedback>".encode(),
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/dmarc-report');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/xml'],
CURLOPT_POSTFIELDS => '<feedback>…<policy_published><domain>example.vn</domain><p>none</p>…</policy_published><record>…</record></feedback>',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"reports_count": 1,
"summary": {
"messages": 123,
"dmarc_pass": 120,
"dmarc_fail": 3,
"pass_rate": 97.56,
"dkim_aligned_pass_rate": 97.56,
"spf_aligned_pass_rate": 97.56,
"dispositions": {
"none": 123
},
"source_ips": 2,
"policies": [
"none"
],
"domains": {
"example.vn": {
"messages": 123,
"pass": 120,
"fail": 3
}
},
"date_range": {
"begin": "2024-11-06T00:00:00.000Z",
"end": "2024-11-06T23:59:59.000Z"
},
"reporters": [
"google.com"
]
},
"advice": [
"Policy is p=none: before enforcing, authorise (SPF) or sign (DKIM, aligned with the From domain) every legitimate source listed in failing_sources.",
"1 source IP(s) sent mail that failed DMARC; check which are your own services (add them to SPF / set up DKIM) and which are spoofing."
],
"sources": [
{
"source_ip": "209.85.220.41",
"count": 120,
"pass": 120,
"fail": 0,
"dkim_aligned_pass": 120,
"spf_aligned_pass": 120,
"header_from": [
"example.vn"
],
"dkim_domains": [
"example.vn (google): pass"
],
"spf_domains": [
"example.vn: pass"
],
"dispositions": {
"none": 120
},
"pass_rate": 100
},
{
"source_ip": "198.51.100.7",
"count": 3,
"pass": 0,
"fail": 3,
"dkim_aligned_pass": 0,
"spf_aligned_pass": 0,
"header_from": [
"example.vn"
],
"dkim_domains": [],
"spf_domains": [
"spammer.test: softfail"
],
"dispositions": {
"none": 3
},
"pass_rate": 0
}
],
"failing_sources": [
{
"source_ip": "198.51.100.7",
"messages": 3,
"header_from": [
"example.vn"
]
}
],
"reports": [
{
"file": null,
"format": "rfc7489",
"reporter": {
"org_name": "google.com",
"email": "noreply-dmarc-support@google.com",
"report_id": "1234567890"
},
"policy_published": {
"domain": "example.vn",
"p": "none",
"sp": "none",
"adkim": "r",
"aspf": "r",
"pct": 100
},
"records": [
"…"
]
}
]
}
Ứng dụng
- Đọc báo cáo DMARC hằng ngày của tên miền mà không cần dashboard trả phí
- Tìm dịch vụ nào còn gửi thư không đạt SPF hoặc DKIM trước khi bật chính sách chặn
- Phát hiện nguồn giả mạo đang gửi thư dưới tên miền của bạn
- Gộp báo cáo cả tháng từ nhiều nhà cung cấp thành một bản tóm tắt
Hỏi đáp
Tôi có thể tải lên những file nào?
File XML báo cáo như nhà cung cấp gửi, file nén gzip (.xml.gz, .gz) hoặc .zip, nhiều file một lúc. Báo cáo pháp lý (RUF) và nguyên e-mail (.eml) chưa được hỗ trợ: hãy tách file đính kèm trước, ví dụ bằng API đọc e-mail của chúng tôi.
dmarc: pass ở đây nghĩa là gì?
Bản ghi đạt DMARC khi bên nhận đánh giá DKIM hoặc SPF là pass và căn chỉnh với tên miền From (policy_evaluated). Kết quả xác thực gốc và kiểm tra căn chỉnh của chúng tôi được hiển thị bên cạnh.
Khi nào nên chuyển sang p=quarantine?
Khi mọi nguồn gửi hợp lệ đều đạt, thường là trên 98% lượng thư trong vài tuần. Trường advice sẽ gợi ý khi báo cáo cho thấy điều đó.
API liên quan
Định vị IP
Tra cứu quốc gia, tỉnh/thành, toạ độ, ASN và nhà mạng của bất kỳ địa chỉ IPv4, IPv6 nào – hoặc IP của chính bạn – chỉ với một request JSON.
DNSTra cứu DNS
Tra bản ghi A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, SRV… của mọi tên miền hoặc tra ngược IP (PTR) qua DNS over HTTPS, kết quả JSON gọn gàng.
@Kiểm tra e-mail
Kiểm tra địa chỉ e-mail: cú pháp RFC, bản ghi MX/A, ~120k tên miền e-mail tạm, tài khoản chức năng, nhà cung cấp miễn phí và gợi ý gõ sai như gmial.com.