Correct a parameter order swap in "diffusion.historyquery" for Mercurial
[phabricator.git] / src / applications / metamta / adapter / PhabricatorMailPostmarkAdapter.php
blob2381ff04bfbe44fd22b0e4679a0b47b8eccab86f
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 January 2019.
37 '50.31.156.6/32',
38 '50.31.156.77/32',
39 '18.217.206.57/32',
44 public function sendMessage(PhabricatorMailExternalMessage $message) {
45 $access_token = $this->getOption('access-token');
47 $parameters = array();
49 $subject = $message->getSubject();
50 if ($subject !== null) {
51 $parameters['Subject'] = $subject;
54 $from_address = $message->getFromAddress();
55 if ($from_address) {
56 $parameters['From'] = (string)$from_address;
59 $to_addresses = $message->getToAddresses();
60 if ($to_addresses) {
61 $to = array();
62 foreach ($to_addresses as $address) {
63 $to[] = (string)$address;
65 $parameters['To'] = implode(', ', $to);
68 $cc_addresses = $message->getCCAddresses();
69 if ($cc_addresses) {
70 $cc = array();
71 foreach ($cc_addresses as $address) {
72 $cc[] = (string)$address;
74 $parameters['Cc'] = implode(', ', $cc);
77 $reply_address = $message->getReplyToAddress();
78 if ($reply_address) {
79 $parameters['ReplyTo'] = (string)$reply_address;
82 $headers = $message->getHeaders();
83 if ($headers) {
84 $list = array();
85 foreach ($headers as $header) {
86 $list[] = array(
87 'Name' => $header->getName(),
88 'Value' => $header->getValue(),
91 $parameters['Headers'] = $list;
94 $text_body = $message->getTextBody();
95 if ($text_body !== null) {
96 $parameters['TextBody'] = $text_body;
99 $html_body = $message->getHTMLBody();
100 if ($html_body !== null) {
101 $parameters['HtmlBody'] = $html_body;
104 $attachments = $message->getAttachments();
105 if ($attachments) {
106 $files = array();
107 foreach ($attachments as $attachment) {
108 $files[] = array(
109 'Name' => $attachment->getFilename(),
110 'ContentType' => $attachment->getMimeType(),
111 'Content' => base64_encode($attachment->getData()),
114 $parameters['Attachments'] = $files;
117 id(new PhutilPostmarkFuture())
118 ->setAccessToken($access_token)
119 ->setMethod('email', $parameters)
120 ->setTimeout(60)
121 ->resolve();