diff --git a/crates/smtp/src/outbound/delivery.rs b/crates/smtp/src/outbound/delivery.rs index 79b244fd..cb9c2ce6 100644 --- a/crates/smtp/src/outbound/delivery.rs +++ b/crates/smtp/src/outbound/delivery.rs @@ -42,7 +42,7 @@ use crate::{ }; use super::{NextHop, TlsStrategy, lookup::ToNextHop, mta_sts, session::SessionParams}; -use crate::queue::{Domain, Error, QueueEnvelope, QueuedMessage, Status}; +use crate::queue::{Domain, Error, FROM_REPORT, QueueEnvelope, QueuedMessage, Status}; impl QueuedMessage { pub fn try_deliver(self, server: Server) { @@ -300,7 +300,7 @@ impl QueuedMessage { interval @ (AggregateFrequency::Hourly | AggregateFrequency::Daily | AggregateFrequency::Weekly) - if is_smtp => + if is_smtp && (message.flags & FROM_REPORT == 0) => { let time = Instant::now(); match server diff --git a/crates/smtp/src/queue/mod.rs b/crates/smtp/src/queue/mod.rs index e9aa9dc5..cbd58afd 100644 --- a/crates/smtp/src/queue/mod.rs +++ b/crates/smtp/src/queue/mod.rs @@ -121,6 +121,8 @@ pub struct Recipient { pub orcpt: Option, } +pub const FROM_REPORT: u64 = 1 << 32; + pub const RCPT_DSN_SENT: u64 = 1 << 32; pub const RCPT_STATUS_CHANGED: u64 = 2 << 32; diff --git a/crates/smtp/src/reporting/mod.rs b/crates/smtp/src/reporting/mod.rs index db313d3b..a9df44f4 100644 --- a/crates/smtp/src/reporting/mod.rs +++ b/crates/smtp/src/reporting/mod.rs @@ -25,7 +25,7 @@ use tokio::io::{AsyncRead, AsyncWrite}; use crate::{ core::Session, inbound::DkimSign, - queue::{DomainPart, Message, MessageSource, spool::SmtpSpool}, + queue::{DomainPart, FROM_REPORT, Message, MessageSource, spool::SmtpSpool}, }; pub mod analysis; @@ -149,6 +149,7 @@ impl SmtpReporting for Server { } // Queue message + message.flags |= FROM_REPORT; message .queue( signature.as_deref(),