Adds MaildirMailboxSource reading new/ and cur/, wired through source.maildir_dir and mailbox.protocol: maildir. Message identity is the Maildir unique name without its :2,FLAGS suffix, so it survives the new/ to cur/ move; it is carried on MailboxSourceMessage.dedup_uid and appended to the message dedup key only when set, leaving fixture and IMAP keys unchanged. Cursor ordering parses the Maildir delivery time instead of comparing names lexically. mark_seen and a missing directory are rejected, matching the read-only IMAP contract. Also fixes the parse-failure path, which keyed identity on raw_message_ref. A new/ to cur/ move rewrites that ref, so an unparseable message re-registered as new on every rescan; it now prefers the source uid when one exists. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
38 lines
697 B
YAML
38 lines
697 B
YAML
mailbox:
|
|
id: return-mailbox-default
|
|
protocol: fixture
|
|
host: null
|
|
port: 993
|
|
tls: true
|
|
username_env: EMAIL_CONNECT_IMAP_USER
|
|
password_env: EMAIL_CONNECT_IMAP_PASSWORD
|
|
folder: INBOX
|
|
|
|
source:
|
|
fixture_dir: tests/fixtures/mailbox
|
|
maildir_dir: null
|
|
|
|
scan:
|
|
mode: incremental
|
|
max_messages_per_run: 5000
|
|
since: null
|
|
from: null
|
|
to: null
|
|
include_seen: true
|
|
mark_seen: false
|
|
store_raw_headers: true
|
|
store_raw_body: false
|
|
store_raw_message_ref: true
|
|
|
|
expected_recipients:
|
|
path: null
|
|
csv_column: email
|
|
|
|
storage:
|
|
path: .email-connect/state.sqlite
|
|
|
|
reports:
|
|
output_dir: reports
|
|
include_all_evidence: true
|
|
include_unknown_messages: true
|
|
timestamp_timezone: UTC
|