From db2b0d12b0adbf19e4c74a297ba310f58d1ddf42 Mon Sep 17 00:00:00 2001 From: mdecimus Date: Sun, 15 Dec 2024 19:10:51 +0100 Subject: [PATCH] Troubleshooting: Say EHLO after STARTTLS --- .../jmap/src/api/management/troubleshoot.rs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/crates/jmap/src/api/management/troubleshoot.rs b/crates/jmap/src/api/management/troubleshoot.rs index f1e9e324..ed5da343 100644 --- a/crates/jmap/src/api/management/troubleshoot.rs +++ b/crates/jmap/src/api/management/troubleshoot.rs @@ -670,6 +670,46 @@ async fn delivery_troubleshoot( } } + // Say EHLO again (some SMTP servers require this) + tx.send(DeliveryStage::EhloStart).await?; + + let now = Instant::now(); + match tokio::time::timeout(timeout, async { + client + .stream + .write_all(format!("EHLO {local_host}\r\n",).as_bytes()) + .await?; + client.stream.flush().await?; + client.read_ehlo().await + }) + .await + { + Ok(Ok(_)) => { + tx.send(DeliveryStage::EhloSuccess { + elapsed: now.elapsed_ms(), + }) + .await?; + } + Ok(Err(err)) => { + tx.send(DeliveryStage::EhloError { + elapsed: now.elapsed_ms(), + reason: err.to_string(), + }) + .await?; + + continue; + } + Err(_) => { + tx.send(DeliveryStage::EhloError { + elapsed: now.elapsed_ms(), + reason: "Timed out reading response".to_string(), + }) + .await?; + + continue; + } + } + // Verify recipient let mut is_success = email.is_none(); if let Some(email) = &email {