Project Alouette: je te plume la queue (et je la remplace par mieux)
This commit is contained in:
@@ -18,7 +18,7 @@ use jmap_proto::{
|
||||
value::{Object, Value},
|
||||
},
|
||||
};
|
||||
use smtp::queue::{ArchivedStatus, Message, spool::SmtpSpool};
|
||||
use smtp::queue::{ArchivedError, ArchivedErrorDetails, ArchivedStatus, Message, spool::SmtpSpool};
|
||||
use smtp_proto::ArchivedResponse;
|
||||
use std::future::Future;
|
||||
use store::rkyv::option::ArchivedOption;
|
||||
@@ -121,7 +121,7 @@ impl EmailSubmissionGet for Server {
|
||||
}
|
||||
ArchivedStatus::TemporaryFailure(reply)
|
||||
| ArchivedStatus::PermanentFailure(reply) => {
|
||||
format_archived_response(&reply.response)
|
||||
format_archived_error_details(reply)
|
||||
}
|
||||
ArchivedStatus::Scheduled => "250 2.1.5 Queued".to_string(),
|
||||
},
|
||||
@@ -232,3 +232,17 @@ fn format_archived_response(response: &ArchivedResponse<String>) -> String {
|
||||
response.message.replace('\n', " "),
|
||||
)
|
||||
}
|
||||
|
||||
fn format_archived_error_details(response: &ArchivedErrorDetails) -> String {
|
||||
match &response.details {
|
||||
ArchivedError::UnexpectedResponse(response) => format_archived_response(&response.response),
|
||||
ArchivedError::DnsError(details)
|
||||
| ArchivedError::Io(details)
|
||||
| ArchivedError::ConnectionError(details)
|
||||
| ArchivedError::TlsError(details)
|
||||
| ArchivedError::DaneError(details)
|
||||
| ArchivedError::MtaStsError(details) => details.to_string(),
|
||||
ArchivedError::RateLimited => "Rate limited".to_string(),
|
||||
ArchivedError::ConcurrencyLimited => "Concurrency limited".to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,14 +4,13 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
||||
*/
|
||||
|
||||
use std::{collections::HashMap, sync::Arc, time::Duration};
|
||||
|
||||
use crate::blob::download::BlobDownload;
|
||||
use common::{
|
||||
Server,
|
||||
config::smtp::queue::QueueName,
|
||||
listener::{ServerInstance, stream::NullIo},
|
||||
storage::index::ObjectIndexBuilder,
|
||||
};
|
||||
|
||||
use email::{
|
||||
identity::Identity,
|
||||
message::metadata::MessageMetadata,
|
||||
@@ -41,13 +40,12 @@ use smtp::{
|
||||
queue::spool::SmtpSpool,
|
||||
};
|
||||
use smtp_proto::{MailFrom, RcptTo, request::parser::Rfc5321Parser};
|
||||
use std::future::Future;
|
||||
use std::{collections::HashMap, sync::Arc, time::Duration};
|
||||
use store::write::{BatchBuilder, now};
|
||||
use trc::AddContext;
|
||||
use utils::{BlobHash, map::vec_map::VecMap, sanitize_email};
|
||||
|
||||
use crate::blob::download::BlobDownload;
|
||||
use std::future::Future;
|
||||
|
||||
pub trait EmailSubmissionSet: Sync + Send {
|
||||
fn email_submission_set(
|
||||
&self,
|
||||
@@ -166,10 +164,11 @@ impl EmailSubmissionSet for Server {
|
||||
|
||||
match undo_status {
|
||||
Some(undo_status) if undo_status == "canceled" => {
|
||||
if let Some(queue_message) = self.read_message(queue_id).await {
|
||||
if let Some(queue_message) =
|
||||
self.read_message(queue_id, QueueName::default()).await
|
||||
{
|
||||
// Delete message from queue
|
||||
let message_due = queue_message.next_event().unwrap_or_default();
|
||||
queue_message.remove(self, message_due).await;
|
||||
queue_message.remove(self, None).await;
|
||||
|
||||
// Update record
|
||||
let mut new_submission = submission.inner.clone();
|
||||
|
||||
Reference in New Issue
Block a user