Skip to content

docs(inbound-email): document AttachmentDownloader across greenfield frameworks#7

Open
mpge wants to merge 1 commit intodocs/greenfield-inbound-emailfrom
docs/attachment-downloader
Open

docs(inbound-email): document AttachmentDownloader across greenfield frameworks#7
mpge wants to merge 1 commit intodocs/greenfield-inbound-emailfrom
docs/attachment-downloader

Conversation

@mpge
Copy link
Copy Markdown
Member

@mpge mpge commented Apr 24, 2026

Summary

Every greenfield framework now ships a reference `AttachmentDownloader` for persisting the provider-hosted URLs in `pending_attachment_downloads` (Mailgun's larger files).

Framework Implementation PR
escalated-dotnet #29
escalated-spring #32
escalated-go #35
escalated-phoenix #41
escalated-symfony #37

Before this round host maintainers had to write their own download + persist logic; this PR adds a "Downloading provider-hosted attachments" section to each of the 5 framework doc pages with:

  • Ready-to-paste snippet constructing the downloader with the reference `LocalFile` storage backend.
  • Size-cap + Mailgun basic-auth wiring.
  • `downloadAll` partial-failure semantics.
  • Typed too-large error per framework.
  • Path-traversal sanitization guarantees.
  • Escape hatch: how to swap in S3 / GCS / Azure by implementing the storage interface.

Drive-by fix

Spring page's response example had `outcome: "CREATED_NEW"` (uppercased). Actual response is lowercased `"created_new"` via `Enum.name().toLowerCase()`. Corrected.

Stacked PR

Based on `docs/greenfield-inbound-email` (#6) so the 5 framework pages exist.

…frameworks

Every greenfield framework now ships a reference AttachmentDownloader
for persisting the provider-hosted URLs in
pending_attachment_downloads (Mailgun's larger files). Before this
round host maintainers had to write their own download + persist logic.

Each of the 5 framework pages gains a "Downloading provider-hosted
attachments" section with:

  - Ready-to-paste snippet constructing the downloader with the
    reference LocalFile storage backend.
  - Size-cap + Mailgun basic-auth wiring.
  - downloadAll partial-failure semantics.
  - Typed too-large error per framework.
  - Path-traversal sanitization guarantees.
  - Escape hatch: how to swap in S3 / GCS / Azure by implementing
    the storage interface.

Drive-by: fix Spring page's response example (outcome was uppercased
"CREATED_NEW"; actual response is lowercased "created_new" via
Enum.name().toLowerCase()).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant