diff --git a/filtermail/src/inbound.rs b/filtermail/src/inbound.rs index f849f0a1..a1d5b879 100644 --- a/filtermail/src/inbound.rs +++ b/filtermail/src/inbound.rs @@ -15,13 +15,15 @@ use std::str::FromStr; pub struct IncomingBeforeQueueHandler { config: Config, dkim_verifier: DkimVerifier, + skip_dkim: bool, } impl IncomingBeforeQueueHandler { - pub fn new(config: Config) -> Result { + pub fn new(config: Config, skip_dkim: bool) -> Result { Ok(Self { config, dkim_verifier: DkimVerifier::new()?, + skip_dkim, }) } } @@ -67,7 +69,9 @@ impl SmtpHandler for IncomingBeforeQueueHandler { } } AddressDomain::Name(domain) => { - self.dkim_verifier.verify(&envelope.data, &domain).await?; + if !self.skip_dkim { + self.dkim_verifier.verify(&envelope.data, &domain).await?; + } } } diff --git a/filtermail/src/main.rs b/filtermail/src/main.rs index ac30f2dc..8d5899f6 100644 --- a/filtermail/src/main.rs +++ b/filtermail/src/main.rs @@ -96,9 +96,18 @@ async fn main() { process::exit(1); } } else { + // Skip DKIM verification (used for tests). + let skip_dkim = env::var("FILTERMAIL_SKIP_DKIM") + .map(|val| val == "1" || val.eq_ignore_ascii_case("true")) + .unwrap_or(false); + + if skip_dkim { + log::warn!("DKIM verification DISABLED! This should not be used in production."); + } + let handler = Arc::new( // We want to panic here if the handler cannot be created. - IncomingBeforeQueueHandler::new(config.clone()).unwrap(), + IncomingBeforeQueueHandler::new(config.clone(), skip_dkim).unwrap(), ); let addr = format!("127.0.0.1:{}", config.filtermail_smtp_port_incoming); let max_size = config.max_message_size;