????
Current Path : /home/multihiv/public_html/wp/wp-content/plugins/gosmtp/main/mailer/ |
Current File : /home/multihiv/public_html/wp/wp-content/plugins/gosmtp/main/mailer/sparkpost.php |
<?php /** * Class GOSMTP_Mailer_Sparkpost. * * @since 1.0.0 */ namespace GOSMTP\Mailer; use GOSMTP\Mailer\Loader; class Sparkpost extends Loader{ var $title = 'Sparkpost'; var $mailer = 'sparkpost'; const API_URL_US = 'https://api.sparkpost.com/api/v1'; const API_URL_EU = 'https://api.eu.sparkpost.com/api/v1'; var $url = ''; public function send(){ global $phpmailer; $phpmailer->isMail(); if($phpmailer->preSend()){ $this->set_API_Url(); $response = $this->postSend(); return $this->handle_response( $response ); } return $this->handle_response(new \WP_Error(400, 'Unable to send mail for some reason!', [])); } public function postSend(){ global $phpmailer; $body = [ 'options' => [ 'open_tracking' => false, 'click_tracking' => false, 'transactional' => true, ], 'content' => [ 'from' => [ 'name' => $phpmailer->FromName, 'email' => $phpmailer->From ], 'subject' => $phpmailer->Subject, 'headers' => [], ], 'recipients' => $this->get_recipients() ]; $body['content']['headers']['CC'] = implode( ',', array_map( [$phpmailer, 'addrFormat'], $phpmailer->getCcAddresses() ) ); if( $phpmailer->ContentType === 'text/plain' ){ $body['content']['text'] = $phpmailer->AltBody; }else{ $body['content']['html'] = $phpmailer->Body; } $replyTo = $phpmailer->getReplyToAddresses(); if(!empty($replyTo)){ $body['content']['reply_to'] = implode( ',', array_map( [ $phpmailer, 'addrFormat' ], $replyTo ) ); } $attachments = $phpmailer->getAttachments(); if(!empty($attachments)){ $body['Content']['Attachments'] = $this->getAttachments($attachments); } $params = [ 'body' => json_encode($body), 'headers' => [ 'Content-Type' => 'application/json', 'Authorization' => $this->getOption('api_key', $this->mailer) ] ]; $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 < 300; $responseBody = \json_decode($responseBody, true); if($isOKCode){ $returnResponse = [ 'status' => true, 'code' => $responseCode, 'messageId' => $responseBody['id'], 'message' => $responseBody['message'], ]; }else{ $error_text = ['']; if(!empty($responseBody['errors'] ) && is_array( $responseBody['errors'])){ foreach($responseBody['errors'] as $error){ if(empty($error['message'])){ continue; } $code = !empty($error['code']) ? $error['code'] : ''; $desc = !empty($error['description']) ? $error['description'] : ''; $error_text[] = $this->message_formatting($error['message'], $code, $desc); } }else{ $error_text[] = $this->get_response_error_message($response); } $error_message = implode( '\r\n', array_map( 'esc_textarea', array_filter( $error_text ) ) ); $returnResponse = new \WP_Error($responseCode, $error_message, $responseBody); } } return $returnResponse; } public function set_API_Url(){ $url = self::API_URL_US; if($this->getOption('region', $this->mailer) == 'eu'){ $url = self::API_URL_EU; } $url .='/transmissions'; return $this->url = $url; } public function get_recipients(){ global $phpmailer; $data = []; $recipients = [ 'to' => $phpmailer->getToAddresses(), 'cc' => $phpmailer->getCcAddresses(), 'bcc' => $phpmailer->getBccAddresses(), ]; $recipients_to = isset( $recipients['to'] ) && is_array( $recipients['to'] ) ? $recipients['to'] : []; $header_to = implode( ',', array_map( [$phpmailer, 'addrFormat'], $recipients_to ) ); foreach( $recipients as $key => $emails ){ if(empty($emails)){ continue; } foreach( $emails as $email ){ $holder = []; $holder['email'] = $email[0]; if( ! empty( $email[1] ) ){ $holder['name'] = $email[1]; } if(!empty($header_to) && $key != 'to'){ $holder['header_to'] = $header_to; } $data[] = [ 'address' => $holder ]; } } return $data; } protected function getAttachments($attachments){ $data = []; foreach($attachments as $attachment){ $file = false; try{ if (is_file($attachment[0]) && is_readable($attachment[0])) { $fileName = basename($attachment[0]); $file = file_get_contents($attachment[0]); $mimeType = mime_content_type($attachment[0]); $filetype = str_replace(';', '', trim($mimeType)); } } catch (\Exception $e) { $file = false; } if ($file === false) { continue; } $data[] = [ 'name' => $fileName, 'type' => $filetype, 'content' => base64_encode($file) ]; } return $data; } public function load_field(){ $fields = array( 'api_key' => array( 'title' => __('API Key'), 'type' => 'password', 'desc' => __( 'Follow this link to get an API Key from SparkPost: <a href="https://app.sparkpost.com/account/api-keys" target="_blank">Get API Key.</a>' ), ), 'region' => array( 'title' => __('Region'), 'type' => 'radio', 'class'=>'regular-text', 'list'=>array( 'Us'=>'US', 'EU'=>'EU', ), 'desc' => __( 'Select your SparkPost account region. <a href="https://support.sparkpost.com/docs/getting-started/getting-started-sparkpost" target="_blank">More information </a>on SparkPost.' ), ), ); return $fields; } }