Path: blob/master/src/applications/metamta/adapter/PhabricatorMailPostmarkAdapter.php
12256 views
<?php12final class PhabricatorMailPostmarkAdapter3extends PhabricatorMailAdapter {45const ADAPTERTYPE = 'postmark';67public function getSupportedMessageTypes() {8return array(9PhabricatorMailEmailMessage::MESSAGETYPE,10);11}1213protected function validateOptions(array $options) {14PhutilTypeSpec::checkMap(15$options,16array(17'access-token' => 'string',18'inbound-addresses' => 'list<string>',19));2021// Make sure this is properly formatted.22PhutilCIDRList::newList($options['inbound-addresses']);23}2425public function newDefaultOptions() {26return array(27'access-token' => null,28'inbound-addresses' => array(29// Via Postmark support circa February 2018, see:30//31// https://postmarkapp.com/support/article/800-ips-for-firewalls32//33// "Configuring Outbound Email" should be updated if this changes.34//35// These addresses were last updated in December 2021.36'50.31.156.6/32',37'50.31.156.77/32',38'18.217.206.57/32',39'3.134.147.250/32',40),41);42}4344public function sendMessage(PhabricatorMailExternalMessage $message) {45$access_token = $this->getOption('access-token');4647$parameters = array();4849$subject = $message->getSubject();50if ($subject !== null) {51$parameters['Subject'] = $subject;52}5354$from_address = $message->getFromAddress();55if ($from_address) {56$parameters['From'] = (string)$from_address;57}5859$to_addresses = $message->getToAddresses();60if ($to_addresses) {61$to = array();62foreach ($to_addresses as $address) {63$to[] = (string)$address;64}65$parameters['To'] = implode(', ', $to);66}6768$cc_addresses = $message->getCCAddresses();69if ($cc_addresses) {70$cc = array();71foreach ($cc_addresses as $address) {72$cc[] = (string)$address;73}74$parameters['Cc'] = implode(', ', $cc);75}7677$reply_address = $message->getReplyToAddress();78if ($reply_address) {79$parameters['ReplyTo'] = (string)$reply_address;80}8182$headers = $message->getHeaders();83if ($headers) {84$list = array();85foreach ($headers as $header) {86$list[] = array(87'Name' => $header->getName(),88'Value' => $header->getValue(),89);90}91$parameters['Headers'] = $list;92}9394$text_body = $message->getTextBody();95if ($text_body !== null) {96$parameters['TextBody'] = $text_body;97}9899$html_body = $message->getHTMLBody();100if ($html_body !== null) {101$parameters['HtmlBody'] = $html_body;102}103104$attachments = $message->getAttachments();105if ($attachments) {106$files = array();107foreach ($attachments as $attachment) {108$files[] = array(109'Name' => $attachment->getFilename(),110'ContentType' => $attachment->getMimeType(),111'Content' => base64_encode($attachment->getData()),112);113}114$parameters['Attachments'] = $files;115}116117id(new PhutilPostmarkFuture())118->setAccessToken($access_token)119->setMethod('email', $parameters)120->setTimeout(60)121->resolve();122}123124}125126127