Constructor SuppressedMailboxChange
- Namespace
- MailFathom.Domain.Mutations
- Assembly
- MailFathom.Domain.dll
SuppressedMailboxChange(MailboxChangeKind, MailboxMutation, StoredEmailId, MailboxMutationRecordId)
One change a synchronization run discovered and did not raise, because MailFathom itself had made it.
public SuppressedMailboxChange(MailboxChangeKind Kind, MailboxMutation Mutation, StoredEmailId StoredEmailId, MailboxMutationRecordId MutationRecordId)
Parameters
KindMailboxChangeKindWhat the mail server reported had changed.
MutationMailboxMutationThe change MailFathom had asked for, which is the same word its log line and its counter use.
StoredEmailIdStoredEmailIdThe local email the change is about.
MutationRecordIdMailboxMutationRecordIdThe durable record that answered was this ours.
Remarks
Suppression exists so that a rule which files mail files it once. Every mutation MailFathom performs is a change synchronization later discovers, so without provenance a rule matching on folder would file a message, discover it in its new folder, match again, and go round for as long as the mailbox is watched — at the cost of an IMAP command a lap. Two rules with overlapping conditions do the same to each other.
It is decided from the record and from nothing else. A cycle limit or a rate limit would be the alternative and both are worse: the first stops a loop only after it has run several times, and the second stops legitimate work at the same threshold. The record answers the question exactly, so the answer is a fact rather than an inference.
This value is what makes a suppression explainable. A rule that appears not to have fired is otherwise the same thing to read as a rule that never matched, so a run reports which change it withheld and which record accounted for it. It names identities and a mutation name only, never a subject, an address, or any other part of the message.