Table of Contents

Enum OutboundDependency

Namespace
MailFathom.Application.Resilience
Assembly
MailFathom.Application.dll

Names one class of outbound dependency whose failures share a retry, timeout, and load-shedding budget.

public enum OutboundDependency

Fields

AiProviderInvocation = 4

Invoking a chat or embedding provider.

DatabaseCommandExecution = 3

Executing a command or query against the local PostgreSQL database.

EmailDelivery = 2

Submitting an email to the SMTP server.

The only failure repeated here is a server's explicit temporary rejection. A submission that ended in an ambiguous transport failure may already have been accepted, and a repeated delivery is visible in the recipient's mailbox.

MailAuthorizationServerInvocation = 5

Exchanging a configured OAuth grant for a mailbox access token at an authorization server.

It is its own class rather than part of MailboxSessionEstablishment because the two disagree about repetition. Establishment must never repeat a rejected credential, since doing so can lock the mailbox account; a token request carries no mailbox password, and an authorization server answers an overload with an ordinary transient HTTP status that is safe to retry. Separating them is also what keeps a token request issued during establishment from nesting one retry budget inside another.

MailboxDataRetrieval = 1

Listing, fetching, and streaming mailbox data over an established IMAP session.

MailboxSessionEstablishment = 0

Connecting, negotiating TLS with, and authenticating an IMAP mailbox session.

Establishment is separated from retrieval because a rejected credential must never be repeated: repeating it can lock the mailbox account, which is a worse outcome than the failed synchronization run.

Remarks

The set is deliberately coarse. A class exists when its failure modes and its safe repetition rules differ from every other class, not when a new call site appears, because each class is one configurable pipeline an operator has to understand and tune.

The enumeration is also the pipeline key, so a value that is not declared here resolves nothing and fails loudly instead of silently executing an operation with no resilience at all.