{"record":{"id":"8a8f17a3779bd59a","repo":"phacility/phabricator","slug":"no-configured-mailers-support-outbound-messages-of","errorCode":null,"errorMessage":"No configured mailers support outbound messages of type \"%s\".","messagePattern":"No configured mailers support outbound messages of type \"(.+?)\"\\.","errorType":"console","errorClass":"PhutilArgumentUsageException","httpStatus":null,"severity":"error","filePath":"src/applications/metamta/management/PhabricatorMailManagementSendTestWorkflow.php","lineNumber":196,"sourceCode":"\n      $mail->setHTMLBody($body);\n    } else {\n      $mail->setBody($body);\n    }\n\n    if ($from) {\n      $mail->setFrom($from->getPHID());\n    }\n\n    $mailers = PhabricatorMetaMTAMail::newMailers(\n      array(\n        'media' => array($type),\n        'outbound' => true,\n      ));\n    $mailers = mpull($mailers, null, 'getKey');\n\n    if (!$mailers) {\n      throw new PhutilArgumentUsageException(\n        pht(\n          'No configured mailers support outbound messages of type \"%s\".',\n          $type));\n    }\n\n    $mailer_key = $args->getArg('mailer');\n    if ($mailer_key !== null) {\n      if (!isset($mailers[$mailer_key])) {\n        throw new PhutilArgumentUsageException(\n          pht(\n            'Mailer key (\"%s\") is not configured, or does not support '.\n            'outbound messages of type \"%s\". Available mailers are: %s.',\n            $mailer_key,\n            $type,\n            implode(', ', array_keys($mailers))));\n      }\n\n      $mail->setTryMailers(array($mailer_key));","sourceCodeStart":178,"sourceCodeEnd":214,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/metamta/management/PhabricatorMailManagementSendTestWorkflow.php#L178-L214","documentation":"Before sending, the workflow calls PhabricatorMetaMTAMail::newMailers() with `outbound => true` and a media filter of the selected message type, and the result was empty: no configured mailer both accepts outbound duty and supports the chosen medium. The mailer set comes from cluster.mailers configuration, so this exception means the configuration, not the command line, is the problem.","triggerScenarios":"`--type sms` with no SMS-capable mailer (e.g. Twilio) in cluster.mailers; every mailer entry marked `\"outbound\": false`; cluster.mailers empty or not loaded (e.g. configured in the wrong file/environment); a mailer whose media list omits the selected type.","commonSituations":"Testing SMS before the SMS provider is configured; fresh installs where only inbound addresses were set up; copy-pasted cluster.mailers JSON that dropped the outbound bit; configuration applied to web nodes but not the host running bin/mail.","solutions":["Run `bin/config get cluster.mailers` and confirm at least one entry has `\"outbound\": true` and a media list covering your type.","Retest with the default email type (omit --type) to see whether any outbound mailer exists at all.","Add or fix the mailer entry (SMTP/SES/SendGrid for email, Twilio-like adapter for SMS) and re-run.","Verify the host you run bin/mail on reads the same configuration as the web nodes."],"exampleFix":"// before (cluster.mailers)\n[{ \"key\": \"ses-1\", \"type\": \"ses\", \"inbound\": true, \"outbound\": false }]\n// $ bin/mail send-test --to alincoln\n// Exception: No configured mailers support outbound messages of type \"email\".\n\n// after\n[{ \"key\": \"ses-1\", \"type\": \"ses\", \"inbound\": true, \"outbound\": true }]","handlingStrategy":"validation","validationCode":"// Pre-flight the same filter the workflow applies:\n$mailers = PhabricatorMetaMTAMail::newMailers(array(\n  'media' => array($type),\n  'outbound' => true,\n));\nif (!$mailers) {\n  fwrite(STDERR, \"No outbound mailer for media '{$type}'. Check cluster.mailers.\\n\");\n  exit(1);\n}","typeGuard":null,"tryCatchPattern":"try {\n  // invoke the workflow\n} catch (PhutilArgumentUsageException $ex) {\n  // configuration problem, not a typo: inspect cluster.mailers next\n  fwrite(STDERR, $ex->getMessage().\"\\n\");\n  exit(1);\n}","preventionTips":["Smoke-test mail after every cluster.mailers change: `bin/mail send-test --to <you>`.","For each mailer entry, verify 'outbound': true and a media list matching its adapter.","Keep configuration identical across web, daemon, and CLI hosts."],"tags":["php","phabricator","mail","configuration","cli"],"backgroundTag":"missing-mailer-configuration","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}