Expand description
§rusmes-core — Mailet Processing Engine for RusMES
rusmes-core is the central mail-processing library for RusMES, providing a composable
pipeline of matchers and mailets that evaluate and transform incoming mail messages.
It is modelled after the Apache James mailet API but implemented from scratch in async Rust.
§Architecture
Mail processing flows through a Processor that applies a sequence of
ProcessingSteps. Each step pairs a Matcher (decides whether to act) with a
Mailet (decides what to do).
┌─────────┐ ┌───────────────────────────────────────────────────┐
│ Mail │────▶│ Processor │
└─────────┘ │ Step 1: Matcher → Mailet (e.g. SpfCheck) │
│ Step 2: Matcher → Mailet (e.g. DkimVerify) │
│ Step 3: Matcher → Mailet (e.g. SieveMailet) │
│ Step N: … │
└───────────────────────────────────────────────────┘§Included Mailets
| Mailet | Purpose |
|---|---|
mailets::AddHeaderMailet | Append arbitrary headers |
mailets::BounceMailet | RFC 3464 DSN bounce generation |
mailets::DkimVerifyMailet | DKIM signature verification (RFC 6376) |
mailets::DmarcVerifyMailet | DMARC policy enforcement (RFC 7489) |
mailets::DnsblMailet | DNS-based block-list lookups |
mailets::ForwardMailet | Forwarding with loop detection |
mailets::GreylistMailet | Greylisting anti-spam |
mailets::LegalisMailet | Legal archiving with RFC 3161 timestamps |
mailets::LocalDeliveryMailet | Local mailbox delivery |
mailets::OxifyMailet | AI-powered mail enrichment |
mailets::RemoteDeliveryMailet | SMTP relay delivery (Pure Rust / rustls) |
mailets::RemoveMimeHeaderMailet | Strip MIME headers by pattern |
mailets::SieveMailet | RFC 5228 Sieve script filtering |
mailets::SpamAssassinMailet | SpamAssassin integration |
mailets::SpfCheckMailet | SPF policy checking (RFC 7208) |
mailets::VirusScanMailet | ClamAV / virus-scan integration |
§Included Matchers
| Matcher | Purpose |
|---|---|
CompositeAll / CompositeAny | Boolean composition of other matchers |
HasAttachment | True when mail has MIME attachments |
HeaderContains | True when a header contains a substring |
IsInBlacklist | Sender/recipient on a configurable deny-list |
IsInWhitelist | Sender/recipient on a configurable allow-list |
RecipientIsLocal | True when recipient is a local domain |
RemoteAddress | True when client IP matches a CIDR range |
SenderIs | Exact or wildcard sender address match |
SizeGreaterThan | True when message exceeds a byte threshold |
§Protocol Support
- SMTP – mail reception and relay (
rusmes-smtp) - IMAP4 – mail access (
rusmes-imap) - JMAP – JSON Meta Application Protocol (
rusmes-jmap) - POP3 – legacy mail retrieval (
rusmes-pop3)
§Feature Flags
This crate currently has no optional feature flags; all components are always compiled.
§Quick-start Example
use rusmes_core::{Processor, ProcessingStep};
use rusmes_proto::MailState;
use std::sync::Arc;
// Build a basic processor that evaluates mail in the Root state
let mut processor = Processor::new("transport", MailState::Root);
// Steps are (matcher, mailet) pairs; add them via add_step(ProcessingStep::new(…))
// See individual mailet and matcher types in the rusmes_core::mailets /
// rusmes_core::matchers modules for concrete implementations.Re-exports§
pub use bounce::generate_bounce;pub use queue::FilesystemQueueStore;pub use queue::MailQueue;pub use queue::Priority;pub use queue::PriorityConfig;pub use queue::PriorityQueue;pub use queue::PriorityStats;pub use queue::QueueEntry;pub use queue::QueueEntryData;pub use queue::QueueStats;pub use queue::QueueStore;pub use rate_limit::RateLimitConfig;pub use rate_limit::RateLimiter;pub use sieve::SieveAction;pub use sieve::SieveCommand;pub use sieve::SieveContext;pub use sieve::SieveInterpreter;pub use sieve::SieveScript;pub use sieve::SieveTest;
Modules§
- bounce
- Bounce message generation
- dsn
- DSN (Delivery Status Notification) utilities - RFC 3464 and RFC 3463
- factory
- Factory for creating mailets and matchers from configuration
- mailets
- Standard mailet implementations
- matchers
- Standard matcher implementations
- queue
- Mail queue management with retry logic and priority support
- rate_
limit - Rate limiting for connection and message processing
- sieve
- Sieve mail filtering language support (RFC 5228)
Structs§
- Mail
Processor Router - Routes mail between processors based on state
- Mailet
Config - Mailet configuration
- Processing
Step - Matcher-Mailet pair
- Processor
- Named processor chain for a specific state
Enums§
- Mailet
Action - Actions a mailet can take after processing a mail