Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/metamta/adapter/PhabricatorMailPostmarkAdapter.php
12256 views
1
<?php
2
3
final class PhabricatorMailPostmarkAdapter
4
extends PhabricatorMailAdapter {
5
6
const ADAPTERTYPE = 'postmark';
7
8
public function getSupportedMessageTypes() {
9
return array(
10
PhabricatorMailEmailMessage::MESSAGETYPE,
11
);
12
}
13
14
protected function validateOptions(array $options) {
15
PhutilTypeSpec::checkMap(
16
$options,
17
array(
18
'access-token' => 'string',
19
'inbound-addresses' => 'list<string>',
20
));
21
22
// Make sure this is properly formatted.
23
PhutilCIDRList::newList($options['inbound-addresses']);
24
}
25
26
public function newDefaultOptions() {
27
return array(
28
'access-token' => null,
29
'inbound-addresses' => array(
30
// Via Postmark support circa February 2018, see:
31
//
32
// https://postmarkapp.com/support/article/800-ips-for-firewalls
33
//
34
// "Configuring Outbound Email" should be updated if this changes.
35
//
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',
41
),
42
);
43
}
44
45
public function sendMessage(PhabricatorMailExternalMessage $message) {
46
$access_token = $this->getOption('access-token');
47
48
$parameters = array();
49
50
$subject = $message->getSubject();
51
if ($subject !== null) {
52
$parameters['Subject'] = $subject;
53
}
54
55
$from_address = $message->getFromAddress();
56
if ($from_address) {
57
$parameters['From'] = (string)$from_address;
58
}
59
60
$to_addresses = $message->getToAddresses();
61
if ($to_addresses) {
62
$to = array();
63
foreach ($to_addresses as $address) {
64
$to[] = (string)$address;
65
}
66
$parameters['To'] = implode(', ', $to);
67
}
68
69
$cc_addresses = $message->getCCAddresses();
70
if ($cc_addresses) {
71
$cc = array();
72
foreach ($cc_addresses as $address) {
73
$cc[] = (string)$address;
74
}
75
$parameters['Cc'] = implode(', ', $cc);
76
}
77
78
$reply_address = $message->getReplyToAddress();
79
if ($reply_address) {
80
$parameters['ReplyTo'] = (string)$reply_address;
81
}
82
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(),
90
);
91
}
92
$parameters['Headers'] = $list;
93
}
94
95
$text_body = $message->getTextBody();
96
if ($text_body !== null) {
97
$parameters['TextBody'] = $text_body;
98
}
99
100
$html_body = $message->getHTMLBody();
101
if ($html_body !== null) {
102
$parameters['HtmlBody'] = $html_body;
103
}
104
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()),
113
);
114
}
115
$parameters['Attachments'] = $files;
116
}
117
118
id(new PhutilPostmarkFuture())
119
->setAccessToken($access_token)
120
->setMethod('email', $parameters)
121
->setTimeout(60)
122
->resolve();
123
}
124
125
}
126
127