Path: blob/master/src/applications/metamta/adapter/PhabricatorMailTestAdapter.php
12256 views
<?php12/**3* Mail adapter that doesn't actually send any email, for writing unit tests4* against.5*/6final class PhabricatorMailTestAdapter7extends PhabricatorMailAdapter {89const ADAPTERTYPE = 'test';1011private $guts = array();1213private $supportsMessageID;14private $failPermanently;15private $failTemporarily;1617public function setSupportsMessageID($support) {18$this->supportsMessageID = $support;19return $this;20}2122public function setFailPermanently($fail) {23$this->failPermanently = true;24return $this;25}2627public function setFailTemporarily($fail) {28$this->failTemporarily = true;29return $this;30}3132public function getSupportedMessageTypes() {33return array(34PhabricatorMailEmailMessage::MESSAGETYPE,35PhabricatorMailSMSMessage::MESSAGETYPE,36);37}3839protected function validateOptions(array $options) {40PhutilTypeSpec::checkMap($options, array());41}4243public function newDefaultOptions() {44return array();45}4647public function supportsMessageIDHeader() {48return $this->supportsMessageID;49}5051public function getGuts() {52return $this->guts;53}5455public function sendMessage(PhabricatorMailExternalMessage $message) {56if ($this->failPermanently) {57throw new PhabricatorMetaMTAPermanentFailureException(58pht('Unit Test (Permanent)'));59}6061if ($this->failTemporarily) {62throw new Exception(63pht('Unit Test (Temporary)'));64}6566switch ($message->getMessageType()) {67case PhabricatorMailEmailMessage::MESSAGETYPE:68$guts = $this->newEmailGuts($message);69break;70case PhabricatorMailSMSMessage::MESSAGETYPE:71$guts = $this->newSMSGuts($message);72break;73}7475$guts['did-send'] = true;76$this->guts = $guts;77}7879public function getBody() {80return idx($this->guts, 'body');81}8283public function getHTMLBody() {84return idx($this->guts, 'html-body');85}8687private function newEmailGuts(PhabricatorMailExternalMessage $message) {88$guts = array();8990$from = $message->getFromAddress();91$guts['from'] = (string)$from;9293$reply_to = $message->getReplyToAddress();94if ($reply_to) {95$guts['reply-to'] = (string)$reply_to;96}9798$to_addresses = $message->getToAddresses();99$to = array();100foreach ($to_addresses as $address) {101$to[] = (string)$address;102}103$guts['tos'] = $to;104105$cc_addresses = $message->getCCAddresses();106$cc = array();107foreach ($cc_addresses as $address) {108$cc[] = (string)$address;109}110$guts['ccs'] = $cc;111112$subject = $message->getSubject();113if (strlen($subject)) {114$guts['subject'] = $subject;115}116117$headers = $message->getHeaders();118$header_list = array();119foreach ($headers as $header) {120$header_list[] = array(121$header->getName(),122$header->getValue(),123);124}125$guts['headers'] = $header_list;126127$text_body = $message->getTextBody();128if (phutil_nonempty_string($text_body)) {129$guts['body'] = $text_body;130}131132$html_body = $message->getHTMLBody();133if (phutil_nonempty_string($html_body)) {134$guts['html-body'] = $html_body;135}136137$attachments = $message->getAttachments();138$file_list = array();139foreach ($attachments as $attachment) {140$file_list[] = array(141'data' => $attachment->getData(),142'filename' => $attachment->getFilename(),143'mimetype' => $attachment->getMimeType(),144);145}146$guts['attachments'] = $file_list;147148return $guts;149}150151private function newSMSGuts(PhabricatorMailExternalMessage $message) {152$guts = array();153154$guts['to'] = $message->getToNumber();155$guts['body'] = $message->getTextBody();156157return $guts;158}159160}161162163