Correct Aphlict websocket URI construction after PHP8 compatibility changes
[phabricator.git] / src / applications / metamta / adapter / PhabricatorMailPostmarkAdapter.php
blobcdc5a830c4b61db0d0f7a25f225db99d491ada6f
1 <?php
3 final class PhabricatorMailPostmarkAdapter
4 extends PhabricatorMailAdapter {
6 const ADAPTERTYPE = 'postmark';
8 public function getSupportedMessageTypes() {
9 return array(
10 PhabricatorMailEmailMessage::MESSAGETYPE,
14 protected function validateOptions(array $options) {
15 PhutilTypeSpec::checkMap(
16 $options,
17 array(
18 'access-token' => 'string',
19 'inbound-addresses' => 'list<string>',
20 ));
22 // Make sure this is properly formatted.
23 PhutilCIDRList::newList($options['inbound-addresses']);
26 public function newDefaultOptions() {
27 return array(
28 'access-token' => null,
29 'inbound-addresses' => array(
30 // Via Postmark support circa February 2018, see:
32 // https://postmarkapp.com/support/article/800-ips-for-firewalls
34 // "Configuring Outbound Email" should be updated if this changes.
36 // These addresses were last updated in December 2021.
37 '50.31.156.6/32',
38 '50.31.156.77/32',
39 '18.217.206.57/32',
40 '3.134.147.250/32',
45 public function sendMessage(PhabricatorMailExternalMessage $message) {
46 $access_token = $this->getOption('access-token');
48 $parameters = array();
50 $subject = $message->getSubject();
51 if ($subject !== null) {
52 $parameters['Subject'] = $subject;
55 $from_address = $message->getFromAddress();
56 if ($from_address) {
57 $parameters['From'] = (string)$from_address;
60 $to_addresses = $message->getToAddresses();
61 if ($to_addresses) {
62 $to = array();
63 foreach ($to_addresses as $address) {
64 $to[] = (string)$address;
66 $parameters['To'] = implode(', ', $to);
69 $cc_addresses = $message->getCCAddresses();
70 if ($cc_addresses) {
71 $cc = array();
72 foreach ($cc_addresses as $address) {
73 $cc[] = (string)$address;
75 $parameters['Cc'] = implode(', ', $cc);
78 $reply_address = $message->getReplyToAddress();
79 if ($reply_address) {
80 $parameters['ReplyTo'] = (string)$reply_address;
83 $headers = $message->getHeaders();
84 if ($headers) {
85 $list = array();
86 foreach ($headers as $header) {
87 $list[] = array(
88 'Name' => $header->getName(),
89 'Value' => $header->getValue(),
92 $parameters['Headers'] = $list;
95 $text_body = $message->getTextBody();
96 if ($text_body !== null) {
97 $parameters['TextBody'] = $text_body;
100 $html_body = $message->getHTMLBody();
101 if ($html_body !== null) {
102 $parameters['HtmlBody'] = $html_body;
105 $attachments = $message->getAttachments();
106 if ($attachments) {
107 $files = array();
108 foreach ($attachments as $attachment) {
109 $files[] = array(
110 'Name' => $attachment->getFilename(),
111 'ContentType' => $attachment->getMimeType(),
112 'Content' => base64_encode($attachment->getData()),
115 $parameters['Attachments'] = $files;
118 id(new PhutilPostmarkFuture())
119 ->setAccessToken($access_token)
120 ->setMethod('email', $parameters)
121 ->setTimeout(60)
122 ->resolve();