{"record":{"id":"7ddf91549f293a12","repo":"phacility/phabricator","slug":"err-disabled-sender","errorCode":"err:disabled-sender","errorMessage":"Your account (\"%s\") is disabled, so you can not interact with over email.","messagePattern":"Your account \\(\"(.+?)\"\\) is disabled, so you can not interact with over email\\.","errorType":"exception","errorClass":"PhabricatorMetaMTAReceivedMailProcessingException","httpStatus":null,"severity":"warning","filePath":"src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php","lineNumber":587,"sourceCode":"        $sender->getUsername());\n    } else if ($sender->getIsStandardUser()) {\n      if (!$sender->getIsApproved()) {\n        $failure_reason = pht(\n          'Your account (\"%s\") has not been approved yet. You can not '.\n          'interact over email until your account is approved.',\n          $sender->getUsername());\n      } else if (PhabricatorUserEmail::isEmailVerificationRequired() &&\n               !$sender->getIsEmailVerified()) {\n        $failure_reason = pht(\n          'You have not verified the email address for your account (\"%s\"). '.\n          'You must verify your email address before you can interact over '.\n          'email.',\n          $sender->getUsername());\n      }\n    }\n\n    if ($failure_reason) {\n      throw new PhabricatorMetaMTAReceivedMailProcessingException(\n        MetaMTAReceivedMailStatus::STATUS_DISABLED_SENDER,\n        $failure_reason);\n    }\n  }\n\n}\n","sourceCodeStart":569,"sourceCodeEnd":594,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php#L569-L594","documentation":"validateSender() runs on every received mail whose From resolved to a user; the first branch fires when $sender->getIsDisabled() is true — an administrator has disabled the account. All inbound interaction for that user is refused with STATUS_DISABLED_SENDER, bundling 'disabled' together with the not-approved and not-verified states under one status code.","triggerScenarios":"Mail arrives from the registered, verified address of a user whose Phabricator account row has isDisabled = 1 (disabled via People > user > Disable, or by an admin cleaning out a leaver). Receiver processing reaches validateSender($sender) and the first condition throws.","commonSituations":"Employees who left the company but whose old mailbox auto-forwards to a Phabricator address; accounts disabled for policy reasons that still receive notification digests and reply to them; admin bulk-disabling spam accounts whose owners keep emailing.","solutions":["If the account should be usable, an administrator re-enables it in People (Manage User > Enable); inbound mail works immediately after.","If the disable is intentional, stop mail at the source: remove the forwarding rule or the mailbox alias that routes that person's mail into Phabricator.","Admins: audit MetaMTA > Received Mail filtered on STATUS_DISABLED_SENDER to find which disabled accounts still send.","For real automation needs, migrate the workflow to a dedicated bot account that stays enabled."],"exampleFix":"// before: disabled account replies to a notification\n// From: leaver@example.com (account 'jdoe', isDisabled=1)\n// -> validateSender() -> err:disabled-sender\n\n// after: admin re-enables the account (or automation moves to a bot account)","handlingStrategy":"validation","validationCode":"// Pre-flight the account state before relying on email interaction:\n$user = id(new PhabricatorUser())->loadOneWhere('userName = %s', $username);\nif (!$user || $user->getIsDisabled()) {\n  // inbound mail from this account will be rejected: re-enable or re-route\n}","typeGuard":null,"tryCatchPattern":"try {\n  $received_mail->processIncomingMail($sender);\n} catch (PhabricatorMetaMTAReceivedMailProcessingException $ex) {\n  if ($ex->getStatusCode() === MetaMTAReceivedMailStatus::STATUS_DISABLED_SENDER\n      && preg_match('/disabled/', $ex->getMessage())) {\n    // administrative action needed; retrying the same mail will not help\n  }\n  throw $ex;\n}","preventionTips":["When disabling accounts, also remove mail forwards and aliases that route their mailbox into Phabricator.","Watch STATUS_DISABLED_SENDER logs to find disabled accounts still sending.","Move long-lived automation onto a dedicated enabled bot account."],"tags":["metamta","email","account-state","disabled-account","inbound-mail"],"backgroundTag":"account-disabled","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}