尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Privacy-first email phishing analyzer SaaS
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Free, open-source phishing analysis for .eml files. Drop in a suspicious email and get a
verdict with the reasons behind it: SPF/DKIM/DMARC/ARC results, relay path, lookalike
domains, link and attachment checks, and content heuristics.
Every report includes an Investigation, the write-up a SOC analyst would produce: is it
phishing, is the sender spoofed (and why a matching Return-Path proves nothing), who really
sent it and from where, what it wants the recipient to do, why your defenses let it through,
role-labelled indicators, ATT&CK techniques, a response checklist, and ready-to-run Microsoft
Defender/Sentinel hunting and Purview purge queries. See docs/INVESTIGATION.md.
npx mxlens message.eml.MIT licensed.
Requires Node.js 20.9 or later.
git clone https://github.com/akmalmuhammed/mxlens.git
cd mxlens
npm ci
npm run build
npm start
Open http://localhost:3000/analyze and drop an .eml file (or try
public/samples/demo-phishing.eml).
For development: npm run dev.
npx mxlens suspicious.eml # readable report
npx mxlens --investigate suspicious.eml > case.md # full analyst write-up (Markdown)
npx mxlens --json reported-folder/ # JSON for every .eml in a folder
npx mxlens --fail-on malicious - < message.eml # exit code 2 if malicious
The CLI runs the same engine as the web app, entirely offline. See cli/README.md.
docker compose up -d --build
This serves MXLens on 127.0.0.1:3000. Put it behind your usual reverse proxy (with TLS) to
share it with a team.
Or run the published image:
docker run -d -p 127.0.0.1:3000:3000 ghcr.io/akmalmuhammed/mxlens:latest
None is required. All settings are optional environment variables; see
.env.example.
| Variable | Default | Effect |
|---|---|---|
MXLENS_ENRICHMENT | false | Enables server-side lookups of indicators extracted from emails. |
VIRUSTOTAL_API_KEY | VirusTotal reputation for IPs, domains and hashes. | |
ABUSEIPDB_API_KEY | AbuseIPDB reputation for IPs. | |
ABUSECH_API_KEY | MalwareBazaar and ThreatFox lookups. | |
GOOGLE_SAFE_BROWSING_KEY | Safe Browsing lookups for domains. | |
IPINFO_TOKEN | Higher rate limits for IP geolocation. |
| Enrichment off (default) | Enrichment on | |
|---|---|---|
| Email content, body, attachments | Stays in the browser | Stays in the browser |
| Public IPs, domains, attachment hashes | Stay in the browser | Sent by the server to the services above |
| Private IPs and internal hostnames | Stay in the browser | Filtered out, never sent |
The analyzer page states which mode the server is in. Enrichment endpoints are rate limited per client IP.
.eml ─► postal-mime (MIME parsing) ─► HeaderParser (auth results, hops, artifacts)
│
▼
AnalysisEngine
├─ HeaderScorer ├─ AttachmentScorer
├─ BodyScorer ├─ ImpersonationScorer / HomographDetector
├─ CrossContextScorer├─ DetectionPipeline (rules)
└─ Trust + Confidence ─► verdict with findings
The engine lives in src/lib/email and runs unchanged in the browser and in
Node.
npm run dev # local dev server
npm run test:run # unit tests
npm run typecheck # TypeScript
npm run lint # ESLint
npm run build:cli # bundle the CLI to cli/dist/mxlens.mjs
import { analyzeEmail } from "@/lib/email/analyze";
const result = await analyzeEmail(rawEml, { body: true, attachments: true });
result.verdict; // "clean" | "suspicious" | "malicious" | "unknown"
result.findings; // [{ reason, severity, impact, ... }]
MXLens is a triage aid, not an email security gateway. Verdicts are heuristic: expect some false positives and misses, and verify before acting. Reports with a sanitized sample are welcome.