SIGN IN SIGN UP

feature #65826 [Mailer] Add PufferPost bridge (JeroenMoonen)

This PR was merged into the 8.2 branch.

Discussion
----------

[Mailer] Add PufferPost bridge

| Q             | A
| ------------- | ---
| Branch?       | 8.2
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Issues        | -
| License       | MIT

Adds a Mailer bridge for [PufferPost](https://pufferpost.com), a transactional email service.

```env
MAILER_DSN=pufferpost+api://API_KEY@default
```

The service has no SMTP relay, so the bridge is API-only and `pufferpost` is an alias for
`pufferpost+api`.

The transport carries what the send endpoint accepts: sender, recipients, subject, text and HTML
bodies, a single reply-to address (several are sent as a raw `Reply-To` header), attachments and
custom headers.

Two places the API differs from the services already bridged here, both handled in the transport:

* **One primary recipient per message.** `to` is a single address, so an email with several `To`
  addresses is submitted to the batch endpoint — one request, one message per recipient, each
  carrying the same Cc and Bcc. A batch answers `200` even when an individual message is refused,
  so the transport surfaces the first rejection rather than reporting a send that never happened.
* **No `Content-ID` support**, so inline (`cid:`) attachments are rejected with a clear message
  instead of arriving as plain attachments with a silently broken reference.

API reference: https://docs.pufferpost.com/reference/api/

Commits
-------

c0829394789 [Mailer] Add PufferPost bridge
N
Nicolas Grekas committed
27ba973f225b159f55e2665a637c2316a941e971