diff --git a/src/Utopia/Messaging/Adapter/Email/Mailchimp.php b/src/Utopia/Messaging/Adapter/Email/Mailchimp.php new file mode 100644 index 00000000..a317fd24 --- /dev/null +++ b/src/Utopia/Messaging/Adapter/Email/Mailchimp.php @@ -0,0 +1,78 @@ +getType()); + + $result = $this->request( + method: 'POST', + url: 'https://mandrillapp.com/api/1.0/messages/send', + headers: [ + 'Content-Type: application/json', + ], + body: [ + 'key' => $this->apiKey, + 'message' => [ + 'html' => $message->isHtml() ? $message->getContent() : null, + 'text' => $message->isHtml() ? null : $message->getContent(), + 'subject' => $message->getSubject(), + 'from_email' => $message->getFromEmail(), + 'from_name' => $message->getFromName(), + 'to' => array_map( + fn(array $to) => ['email' => $to['email'], 'name' => $to['name'] ?? ''], + $message->getTo() + ), + ], + ], + ); + + $statusCode = $result['statusCode']; + $responseBody = $result['response']; + + if ($statusCode >= 200 && $statusCode < 300) { + $response->setDeliveredTo(\count($message->getTo())); + foreach ($message->getTo() as $to) { + $response->addResult($to['email']); + } + } elseif ($statusCode >= 400 && $statusCode < 500) { + $error = ''; + if (\is_array($responseBody) && isset($responseBody['message'])) { + $error = $responseBody['message']; + } elseif (\is_string($responseBody)) { + $error = $responseBody; + } + + foreach ($message->getTo() as $to) { + $response->addResult($to['email'], $error ?: 'Unknown error'); + } + } + + return $response->toArray(); + } +}