From 3420287be2b35ca4ee54d600b0828468ca8be05a Mon Sep 17 00:00:00 2001 From: Maurus Decimus <11444311+mdecimus@users.noreply.github.com> Date: Mon, 11 May 2026 12:31:48 +0200 Subject: [PATCH] Fix Autodiscover v2 endpoint unreachable --- CHANGELOG.md | 1 + crates/http/src/request.rs | 13 +++---------- crates/jmap/src/registry/mapping/queued_message.rs | 6 +++--- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8136c50..03ee4f17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If - MTA: - Allow rescheduling recipients with permanent failures. - Process reports using original `RCPT` before rewriting. +- Autodiscover v2 endpoint unreachable. ## [0.16.4] - 2026-05-05 diff --git a/crates/http/src/request.rs b/crates/http/src/request.rs index f8051776..ff35e905 100644 --- a/crates/http/src/request.rs +++ b/crates/http/src/request.rs @@ -452,11 +452,9 @@ impl ParseHttp for Server { } } "autodiscover" | "Autodiscover" | "AutoDiscover" => { + let document_name = path.next().unwrap_or_default(); if req.method() == Method::POST - && path - .next() - .unwrap_or_default() - .eq_ignore_ascii_case("autodiscover.xml") + && document_name.eq_ignore_ascii_case("autodiscover.xml") { // Limit anonymous requests self.is_http_anonymous_request_allowed(session.remote_ip) @@ -468,12 +466,7 @@ impl ParseHttp for Server { ) .await .map(|resource| resource.into_http_response()); - } else if req.method() == Method::POST - && path - .next() - .unwrap_or_default() - .eq_ignore_ascii_case("autodiscover.json") - { + } else if document_name.eq_ignore_ascii_case("autodiscover.json") { // Limit anonymous requests self.is_http_anonymous_request_allowed(session.remote_ip) .await?; diff --git a/crates/jmap/src/registry/mapping/queued_message.rs b/crates/jmap/src/registry/mapping/queued_message.rs index e7c357f3..e88117d3 100644 --- a/crates/jmap/src/registry/mapping/queued_message.rs +++ b/crates/jmap/src/registry/mapping/queued_message.rs @@ -186,14 +186,14 @@ pub(crate) async fn queued_message_set( } if has_changes { + // Delete message if there are no pending deliveries let message = MessageWrapper::new(queued_message, queue_id, QueueName::default()); - let has_pending = message.message.recipients.iter().any(|recipient| { + let is_success = if message.message.recipients.iter().any(|recipient| { matches!( recipient.status, Status::TemporaryFailure(_) | Status::Scheduled ) - }); - let is_success = if has_pending || prev_event.is_none() { + }) { message.save_changes(set.server, prev_event).await } else { message.remove(set.server, prev_event).await