phacility/phabricator · info · PhabricatorMetaMTAReceivedMailProcessingException

err:exception

err:exception

Error message

Ignoring email to create files that did not include attachments.

What it means

FileCreateMailReceiver handles inbound email that creates files from attachments; when PhabricatorMetaMTAReceivedMail::getAttachments() returns empty, it throws a processing exception with STATUS_UNHANDLED_EXCEPTION so the mail is marked ignored rather than processed. This is expected control flow, not a malfunction: there is nothing to turn into a file. It appears in logs with the err:exception code but is informational.

Source

Thrown at src/applications/files/mail/FileCreateMailReceiver.php:17

<?php

final class FileCreateMailReceiver
  extends PhabricatorApplicationMailReceiver {

  protected function newApplication() {
    return new PhabricatorFilesApplication();
  }

  protected function processReceivedMail(
    PhabricatorMetaMTAReceivedMail $mail,
    PhutilEmailAddress $target) {
    $author = $this->getAuthor();

    $attachment_phids = $mail->getAttachments();
    if (empty($attachment_phids)) {
      throw new PhabricatorMetaMTAReceivedMailProcessingException(
        MetaMTAReceivedMailStatus::STATUS_UNHANDLED_EXCEPTION,
        pht(
          'Ignoring email to create files that did not include attachments.'));
    }
    $first_phid = head($attachment_phids);
    $mail->setRelatedPHID($first_phid);

    $sender = $this->getSender();
    if (!$sender) {
      return;
    }

    $attachment_count = count($attachment_phids);
    if ($attachment_count > 1) {
      $subject = pht('You successfully uploaded %d files.', $attachment_count);
    } else {
      $subject = pht('You successfully uploaded a file.');
    }

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Send mail that actually contains file attachments (multipart MIME) to the files receive address
  2. If testing, attach any file before sending
  3. If attachments were included but ignored, verify the inbound mail pipeline (mail adapter, parsing) preserves MIME parts
Defensive patterns

Strategy: validation

Validate before calling

// In a custom receiver subclass, decide how to treat attachment-less mail
// instead of relying on the default ignore-and-throw:
protected function processReceivedMail($mail, $target) {
  if (!$mail->getAttachments()) {
    // Log/notify the sender, then return to skip file creation cleanly.
    return;
  }
  // ...
}

Try / catch

try {
  // invoke receiver processing
} catch (PhabricatorMetaMTAReceivedMailProcessingException $ex) {
  // Mail is marked with the status code and ignored; safe to log and continue.
}

Prevention

When it happens

Trigger: Sending a plain-text email with no MIME attachments to the files application's inbound address; mail where all content is inline text; a mail gateway stripping MIME parts before delivery to Phabricator.

Common situations: Users replying to notification threads (no attachments) at the file-create address; corporate mail gateways removing attachments; admins testing the address with an empty message.

Related errors


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