mirror of
https://github.com/stalwartlabs/mail-server.git
synced 2025-10-11 13:05:50 +08:00
Implicit MX on lookup failures
This commit is contained in:
parent
c30d12157a
commit
552347b792
1 changed files with 21 additions and 8 deletions
|
@ -4,33 +4,34 @@
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use crate::outbound::client::{from_error_status, from_mail_send_error, SmtpClient};
|
use crate::outbound::client::{SmtpClient, from_error_status, from_mail_send_error};
|
||||||
use crate::outbound::dane::dnssec::TlsaLookup;
|
use crate::outbound::dane::dnssec::TlsaLookup;
|
||||||
use crate::outbound::lookup::DnsLookup;
|
use crate::outbound::lookup::DnsLookup;
|
||||||
use crate::outbound::mta_sts::lookup::MtaStsLookup;
|
use crate::outbound::mta_sts::lookup::MtaStsLookup;
|
||||||
use crate::outbound::mta_sts::verify::VerifyPolicy;
|
use crate::outbound::mta_sts::verify::VerifyPolicy;
|
||||||
use crate::outbound::{client::StartTlsResult, dane::verify::TlsaVerify};
|
use crate::outbound::{client::StartTlsResult, dane::verify::TlsaVerify};
|
||||||
use crate::queue::dsn::SendDsn;
|
use crate::queue::dsn::SendDsn;
|
||||||
use crate::queue::spool::{SmtpSpool, LOCK_EXPIRY};
|
use crate::queue::spool::{LOCK_EXPIRY, SmtpSpool};
|
||||||
use crate::queue::throttle::IsAllowed;
|
use crate::queue::throttle::IsAllowed;
|
||||||
use crate::reporting::SmtpReporting;
|
use crate::reporting::SmtpReporting;
|
||||||
|
use common::Server;
|
||||||
use common::config::{
|
use common::config::{
|
||||||
server::ServerProtocol,
|
server::ServerProtocol,
|
||||||
smtp::{queue::RequireOptional, report::AggregateFrequency},
|
smtp::{queue::RequireOptional, report::AggregateFrequency},
|
||||||
};
|
};
|
||||||
use common::ipc::{PolicyType, QueueEvent, QueueEventStatus, TlsEvent};
|
use common::ipc::{PolicyType, QueueEvent, QueueEventStatus, TlsEvent};
|
||||||
use common::Server;
|
|
||||||
use mail_auth::{
|
use mail_auth::{
|
||||||
mta_sts::TlsRpt,
|
mta_sts::TlsRpt,
|
||||||
report::tlsrpt::{FailureDetails, ResultType},
|
report::tlsrpt::{FailureDetails, ResultType},
|
||||||
};
|
};
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
use smtp_proto::MAIL_REQUIRETLS;
|
use smtp_proto::MAIL_REQUIRETLS;
|
||||||
|
use std::sync::Arc;
|
||||||
use std::{
|
use std::{
|
||||||
net::{IpAddr, Ipv4Addr, SocketAddr},
|
net::{IpAddr, Ipv4Addr, SocketAddr},
|
||||||
time::{Duration, Instant},
|
time::{Duration, Instant},
|
||||||
};
|
};
|
||||||
use store::write::{now, BatchBuilder, QueueClass, ValueClass};
|
use store::write::{BatchBuilder, QueueClass, ValueClass, now};
|
||||||
use trc::{DaneEvent, DeliveryEvent, MtaStsEvent, ServerEvent, TlsRptEvent};
|
use trc::{DaneEvent, DeliveryEvent, MtaStsEvent, ServerEvent, TlsRptEvent};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -38,7 +39,7 @@ use crate::{
|
||||||
reporting::tls::TlsRptOptions,
|
reporting::tls::TlsRptOptions,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{lookup::ToNextHop, mta_sts, session::SessionParams, NextHop, TlsStrategy};
|
use super::{NextHop, TlsStrategy, lookup::ToNextHop, mta_sts, session::SessionParams};
|
||||||
use crate::queue::{Domain, Error, QueueEnvelope, QueuedMessage, Status};
|
use crate::queue::{Domain, Error, QueueEnvelope, QueuedMessage, Status};
|
||||||
|
|
||||||
impl QueuedMessage {
|
impl QueuedMessage {
|
||||||
|
@ -104,9 +105,10 @@ impl QueuedMessage {
|
||||||
)));
|
)));
|
||||||
|
|
||||||
if let Err(err) = server.store().write(batch.build()).await {
|
if let Err(err) = server.store().write(batch.build()).await {
|
||||||
trc::error!(err
|
trc::error!(
|
||||||
.details("Failed to delete queue event.")
|
err.details("Failed to delete queue event.")
|
||||||
.caused_by(trc::location!()));
|
.caused_by(trc::location!())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unlock event
|
// Unlock event
|
||||||
|
@ -493,6 +495,17 @@ impl QueuedMessage {
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(mx) => mx,
|
Ok(mx) => mx,
|
||||||
|
Err(mail_auth::Error::DnsRecordNotFound(_)) => {
|
||||||
|
trc::event!(
|
||||||
|
Delivery(DeliveryEvent::MxLookupFailed),
|
||||||
|
SpanId = message.span_id,
|
||||||
|
Domain = domain.domain.clone(),
|
||||||
|
Details = "No MX records were found, attempting implicit MX.",
|
||||||
|
Elapsed = time.elapsed(),
|
||||||
|
);
|
||||||
|
|
||||||
|
Arc::new(vec![])
|
||||||
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
trc::event!(
|
trc::event!(
|
||||||
Delivery(DeliveryEvent::MxLookupFailed),
|
Delivery(DeliveryEvent::MxLookupFailed),
|
||||||
|
|
Loading…
Add table
Reference in a new issue