Skip to main content

Crate rusmes_core

Crate rusmes_core 

Source
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

MailetPurpose
mailets::AddHeaderMailetAppend arbitrary headers
mailets::BounceMailetRFC 3464 DSN bounce generation
mailets::DkimVerifyMailetDKIM signature verification (RFC 6376)
mailets::DmarcVerifyMailetDMARC policy enforcement (RFC 7489)
mailets::DnsblMailetDNS-based block-list lookups
mailets::ForwardMailetForwarding with loop detection
mailets::GreylistMailetGreylisting anti-spam
mailets::LegalisMailetLegal archiving with RFC 3161 timestamps
mailets::LocalDeliveryMailetLocal mailbox delivery
mailets::OxifyMailetAI-powered mail enrichment
mailets::RemoteDeliveryMailetSMTP relay delivery (Pure Rust / rustls)
mailets::RemoveMimeHeaderMailetStrip MIME headers by pattern
mailets::SieveMailetRFC 5228 Sieve script filtering
mailets::SpamAssassinMailetSpamAssassin integration
mailets::SpfCheckMailetSPF policy checking (RFC 7208)
mailets::VirusScanMailetClamAV / virus-scan integration

§Included Matchers

MatcherPurpose
CompositeAll / CompositeAnyBoolean composition of other matchers
HasAttachmentTrue when mail has MIME attachments
HeaderContainsTrue when a header contains a substring
IsInBlacklistSender/recipient on a configurable deny-list
IsInWhitelistSender/recipient on a configurable allow-list
RecipientIsLocalTrue when recipient is a local domain
RemoteAddressTrue when client IP matches a CIDR range
SenderIsExact or wildcard sender address match
SizeGreaterThanTrue 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§

MailProcessorRouter
Routes mail between processors based on state
MailetConfig
Mailet configuration
ProcessingStep
Matcher-Mailet pair
Processor
Named processor chain for a specific state

Enums§

MailetAction
Actions a mailet can take after processing a mail

Traits§

Mailet
Core mailet trait - message processing unit
Matcher
Matcher trait - filter recipients based on criteria