preSend()) { return $this->postSend(); } return $this->handleResponse(new \WP_Error(422, __('Something went wrong!', 'fluent-smtp'), [])); } public function postSend() { $body = [ 'sender' => $this->getFrom(), 'subject' => $this->getSubject(), 'htmlContent' => $this->getBody() ]; $contentType = $this->getParam('headers.content-type'); if ($contentType == 'multipart/alternative') { $body['textContent'] = $this->phpMailer->AltBody; } else if ($contentType == 'text/plain') { $body['textContent'] = $this->getBody(); unset($body['htmlContent']); } if ($replyTo = $this->getReplyTo()) { $body['replyTo'] = $replyTo; } $recipients = $this->setRecipients(); $body = array_merge($body, $recipients); if (!empty($this->getParam('attachments'))) { $body['attachment'] = $this->getAttachments(); } $params = [ 'body' => json_encode($body), 'headers' => $this->getRequestHeaders() ]; $params = array_merge($params, $this->getDefaultParams()); $response = wp_safe_remote_post($this->url, $params); if (is_wp_error($response)) { $returnResponse = new \WP_Error($response->get_error_code(), $response->get_error_message(), $response->get_error_messages()); } else { $responseBody = wp_remote_retrieve_body($response); $responseCode = wp_remote_retrieve_response_code($response); $isOKCode = $responseCode == $this->emailSentCode; $responseBody = \json_decode($responseBody, true); if ($isOKCode) { $returnResponse = [ 'messageId' => Arr::get($responseBody, 'messageId') ]; } else { $returnResponse = new \WP_Error($responseCode, Arr::get($responseBody, 'message', __('SendInBlueError API Error', 'fluent-smtp')), $responseBody); } } $this->response = $returnResponse; return $this->handleResponse($this->response); } public function setSettings($settings) { if ($settings['key_store'] == 'wp_config') { $settings['api_key'] = defined('FLUENTMAIL_SENDINBLUE_API_KEY') ? FLUENTMAIL_SENDINBLUE_API_KEY : ''; } $this->settings = $settings; return $this; } protected function getFrom() { return [ 'name' => $this->getParam('sender_name'), 'email' => $this->getParam('sender_email') ]; } protected function getReplyTo() { if ($replyTo = $this->getParam('headers.reply-to')) { return reset($replyTo); } } protected function setRecipients() { $recipients = [ 'to' => $this->getTo(), 'cc' => $this->getCarbonCopy(), 'bcc' => $this->getBlindCarbonCopy() ]; $recipients = array_filter($recipients); foreach ($recipients as $key => $recipient) { $array = array_map(function ($recipient) { return isset($recipient['name']) ? $recipient['name'] . ' <' . $recipient['email'] . '>' : $recipient['email']; }, $recipient); $this->attributes['formatted'][$key] = implode(', ', $array); } return $recipients; } protected function getTo() { return $this->getParam('to'); } protected function getCarbonCopy() { return $this->getParam('headers.cc'); } protected function getBlindCarbonCopy() { return $this->getParam('headers.bcc'); } protected function getBody() { return $this->getParam('message'); } protected function getAttachments() { $files = []; foreach ($this->getParam('attachments') as $attachment) { if (is_file($attachment[0]) && is_readable($attachment[0])) { $ext = pathinfo($attachment[0], PATHINFO_EXTENSION); if (in_array($ext, $this->allowedAttachmentExts, true)) { $files[] = [ 'name' => basename($attachment[0]), 'content' => base64_encode(file_get_contents($attachment[0])) ]; } } } return $files; } protected function getCustomEmailHeaders() { return []; } protected function getRequestHeaders() { return [ 'Api-Key' => $this->getSetting('api_key'), 'Content-Type' => 'application/json', 'Accept' => 'application/json' ]; } }