phacility/phabricator · info · PhabricatorMetaMTAReceivedMailProcessingException

err:reserved-recipient

err:reserved-recipient

Error message

No application handled this mail. This mail was sent to a reserved recipient ("%s") so bounces are suppressed.

What it means

Thrown in PhabricatorMetaMTAReceivedMail::executeSend when no receiver (no application mail receiver) accepted the message AND the recipient list contained a reserved address such as noreply@. Normally that would bounce with 'no receivers', but a reserved recipient makes Phabricator silently drop the mail (STATUS_RESERVED) to avoid replying to From: noreply@phabricator and creating a mail storm. The comment is explicit: a reply-all that includes 'noreply@' should be dropped, not bounced.

Source

Thrown at src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php:251

      if ($receiver_exception) {
        throw $receiver_exception;
      }


      if (!$any_accepted) {
        if ($reserved_recipient) {
          // If nothing accepted the mail, we normally raise an error to help
          // users who mistakenly send mail to "barges@" instead of "bugs@".

          // However, if the recipient list included a reserved recipient, we
          // don't bounce the mail with an error.

          // The intent here is that if a user does a "Reply All" and includes
          // "From: noreply@phabricator" in the receipient list, we just want
          // to drop the mail rather than send them an unhelpful bounce message.

          throw new PhabricatorMetaMTAReceivedMailProcessingException(
            MetaMTAReceivedMailStatus::STATUS_RESERVED,
            pht(
              'No application handled this mail. This mail was sent to a '.
              'reserved recipient ("%s") so bounces are suppressed.',
              (string)$reserved_recipient));
        } else if (!$sender) {
          // NOTE: Currently, we'll always drop this mail (since it's headed to
          // an unverified recipient). See T12237. These details are still
          // useful because they'll appear in the mail logs and Mail web UI.

          throw new PhabricatorMetaMTAReceivedMailProcessingException(
            MetaMTAReceivedMailStatus::STATUS_UNKNOWN_SENDER,
            pht(
              'This email was sent from an email address ("%s") that is not '.
              'associated with a registered user account. To interact via '.
              'email, add this address to your account.',
              (string)$this->newFromAddress()));
        } else {

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. No server-side fix is expected — this status is intentional drop-without-bounce; check the mail logs (MetaMTA > Received Mail) to confirm STATUS_RESERVED.
  2. If you are the sender: reply only to the valid application address and remove noreply@ from the recipient list, then verify the application address is correct.
  3. Admins: confirm the reserved-address config (e.g. 'metamta.reserved-names' style settings) matches the addresses Phabricator itself sends from, so loop protection stays effective.
  4. If mail silently disappears and you expected a bounce, remember this exact code path is why: a reserved recipient suppresses the error email by design.

Example fix

// before: reply-all with a dead object address + noreply@
// To: barges@phabricator.example, noreply@phabricator.example
// -> no receiver accepts, reserved recipient present -> err:reserved-recipient (dropped, no bounce)

// after: send only to the correct application address
// To: bugs@phabricator.example
Defensive patterns

Strategy: try-catch

Try / catch

// When driving PhabricatorMetaMTAReceivedMail::processIncomingMail programmatically:
try {
  $received_mail->processIncomingMail($sender);
} catch (PhabricatorMetaMTAReceivedMailProcessingException $ex) {
  if ($ex->getStatusCode() === MetaMTAReceivedMailStatus::STATUS_RESERVED) {
    // expected drop: a reserved recipient was on the list and nothing accepted
    return; // do not retry, do not bounce
  }
  throw $ex;
}

Prevention

When it happens

Trigger: loadAllReceivers()/processIncomingMail runs, $any_accepted stays false, and $reserved_recipient is non-null (a To/CC address matched a reserved list, e.g. the configured metamta noreply address). Typical: a user reply-all on a Phabricator notification that includes 'X-Phabricator-Sent-This-Message' mail from noreply@, where the object address itself is also wrong (typo'd or unknown), so nothing accepts it.

Common situations: Reply-all including noreply@ plus a misspelled application address (barges@ instead of bugs@); automated responders (out-of-office, ticketing systems) replying to Phabricator notifications; the object address having been retired after the thread started.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/337a327f6bfed8a8. Report an issue: GitHub.