getRequest(); if ($request->isFormPost()) { $mail = new PhabricatorMetaMTAMail(); $mail->addTos($request->getArr('to')); $mail->addCCs($request->getArr('cc')); $mail->setSubject($request->getStr('subject')); $mail->setBody($request->getStr('body')); $files = $request->getArr('files'); if ($files) { foreach ($files as $phid) { $file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $phid); $mail->addAttachment(new PhabricatorMetaMTAAttachment( $file->loadFileData(), $file->getName(), $file->getMimeType() )); } } $mail->setFrom($request->getUser()->getPHID()); $mail->setSimulatedFailureCount($request->getInt('failures')); $mail->setIsHTML($request->getInt('html')); $mail->setIsBulk($request->getInt('bulk')); $mail->setMailTags($request->getStrList('mailtags')); $mail->save(); if ($request->getInt('immediately')) { $mail->sendNow(); } return id(new AphrontRedirectResponse()) ->setURI($this->getApplicationURI('/view/'.$mail->getID().'/')); } $failure_caption = "Enter a number to simulate that many consecutive send failures before ". "really attempting to deliver via the underlying MTA."; $doclink_href = PhabricatorEnv::getDoclink( 'article/Configuring_Outbound_Email.html'); $doclink = phutil_render_tag( 'a', array( 'href' => $doclink_href, 'target' => '_blank', ), 'Configuring Outbound Email'); $instructions = '

This form will send a normal '. 'email using the settings you have configured for Phabricator. For more '. 'information, see '.$doclink.'.

'; $adapter = PhabricatorEnv::getEnvConfig('metamta.mail-adapter'); $warning = null; if ($adapter == 'PhabricatorMailImplementationTestAdapter') { $warning = new AphrontErrorView(); $warning->setTitle('Email is Disabled'); $warning->setSeverity(AphrontErrorView::SEVERITY_WARNING); $warning->appendChild( '

This installation of Phabricator is currently set to use '. 'PhabricatorMailImplementationTestAdapter to deliver '. 'outbound email. This completely disables outbound email! All '. 'outbound email will be thrown in a deep, dark hole until you '. 'configure a real adapter.

'); } $panel_id = celerity_generate_unique_node_id(); $form = new AphrontFormView(); $form->setUser($request->getUser()); $form ->appendChild($instructions) ->appendChild( id(new AphrontFormStaticControl()) ->setLabel('Adapter') ->setValue($adapter)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel('To') ->setName('to') ->setDatasource('/typeahead/common/mailable/')) ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel('CC') ->setName('cc') ->setDatasource('/typeahead/common/mailable/')) ->appendChild( id(new AphrontFormTextControl()) ->setLabel('Subject') ->setName('subject')) ->appendChild( id(new AphrontFormTextAreaControl()) ->setLabel('Body') ->setName('body')) ->appendChild( id(new AphrontFormTextControl()) ->setLabel('Mail Tags') ->setName('mailtags') ->setCaption( 'Example: differential-cc, differential-comment')) ->appendChild( id(new AphrontFormDragAndDropUploadControl()) ->setLabel('Attach Files') ->setName('files') ->setDragAndDropTarget($panel_id) ->setActivatedClass('aphront-panel-view-drag-and-drop')) ->appendChild( id(new AphrontFormTextControl()) ->setLabel('Simulate Failures') ->setName('failures') ->setCaption($failure_caption)) ->appendChild( id(new AphrontFormCheckboxControl()) ->setLabel('HTML') ->addCheckbox('html', '1', 'Send as HTML email.')) ->appendChild( id(new AphrontFormCheckboxControl()) ->setLabel('Bulk') ->addCheckbox('bulk', '1', 'Send with bulk email headers.')) ->appendChild( id(new AphrontFormCheckboxControl()) ->setLabel('Send Now') ->addCheckbox( 'immediately', '1', 'Send immediately, not via MetaMTA background script.')) ->appendChild( id(new AphrontFormSubmitControl()) ->setValue('Send Mail')); $panel = new AphrontPanelView(); $panel->setHeader('Send Email'); $panel->appendChild($form); $panel->setID($panel_id); $panel->setWidth(AphrontPanelView::WIDTH_FORM); $nav = $this->buildSideNavView(); $nav->selectFilter('send'); $nav->appendChild( array( $warning, $panel, )); return $this->buildApplicationPage( $nav, array( 'title' => 'Send Test', )); } }