Viewing file: postmark.php (5.18 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Class GOSMTP_Mailer_Postmark. * * @since 1.0.0 */ namespace GOSMTP\Mailer; use GOSMTP\Mailer\Loader;
class Postmark extends Loader{
var $title = 'Postmark'; var $mailer = 'postmark'; var $url = 'https://api.postmarkapp.com/email';
public function send(){ global $phpmailer;
$phpmailer->isMail();
if ($phpmailer->preSend()) { $return_response = $this->postSend(); return $this->handle_response( $return_response ); }
return $this->handle_response(new \WP_Error(400, 'Unable to send mail for some reason!', [])); }
public function postSend(){ global $phpmailer;
$body = array( 'From' => $phpmailer->From, 'To' => $this->getRecipients($phpmailer->getToAddresses()), 'Subject' => $phpmailer->Subject, ); $message_id = $this->getOption('message_stream_id', $this->mailer); if(!empty($message_id)){ $body['MessageStream'] = $message_id; } if($replyTo = $this->getRecipients($phpmailer->getReplyToAddresses())){ $body['ReplyTo'] = $replyTo; }
if($bcc = $this->getRecipients($phpmailer->getBccAddresses())){ $body['Bcc'] = $bcc; }
if($cc = $this->getRecipients($phpmailer->getCcAddresses())){ $body['Cc'] = $cc; }
if($phpmailer->ContentType == 'text/html'){ $body['HtmlBody'] = $phpmailer->Body;
// TODO: create stting and if is true then set this to true $body['TrackOpens'] = true;
// TODO: create stting and if is true then set this to HtmlOnly $body['TrackLinks'] = 'HtmlOnly'; }else{ $body['TextBody'] = $phpmailer->Body; }
if(!empty($phpmailer->getAttachments())){ $body['Attachments'] = $this->getAttachments(); }
// Handle apostrophes in email address From names by escaping them for the Postmark API. $from_regex = "/(\"From\": \"[a-zA-Z\\d]+)*[\\\\]{2,}'/";
$args = array( 'headers' => $this->getRequestHeaders(), 'body' => preg_replace($from_regex, "'", wp_json_encode($body), 1), );
$response = wp_remote_post($this->url, $args);
if(is_wp_error($response)){ $return_response = 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);
$responseBody = \json_decode($responseBody, true);
if($responseCode == 200){ $return_response = [ 'status' => true, 'code' => $responseCode, 'id' => $responseBody['MessageID'], 'message' => $responseBody['Message'], ]; }else{ $error_text = ['']; if(!empty( $responseBody['Message'])){ $message = $responseBody['Message']; $code = ! empty( $responseBody['ErrorCode'] ) ? $responseBody['ErrorCode'] : ''; $error_text[] = $this->message_formatting( $message, $code ); }else{ $error_text[] = $this->get_response_error_message($response); } $error_msg = implode( '\r\n', array_map( 'esc_textarea', array_filter( $error_text ) ) ); $return_response = new \WP_Error($responseCode, $error_msg, $responseBody); } }
return $return_response ; }
public function getRecipients($recipient){ $recipients = $this->filterRecipientsArray($recipient);
$array = array_map(function($recipient){ return isset($recipient['name']) ? $recipient['name'] . ' <' . $recipient['address'] . '>' : $recipient['address']; }, $recipients );
return implode(', ', $array); }
function getRequestHeaders(){ return array( 'Accept' => 'application/json', 'Content-Type' => 'application/json', 'X-Postmark-Server-Token' => $this->getOption('server_api_token', $this->mailer), ); }
protected function getAttachments(){ global $phpmailer;
$data = []; $attachments = $phpmailer->getAttachments();
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]); } }catch(\Exception $e){ $file = false; }
if($file === false){ continue; }
$data[] = array( 'Name' => $fileName, 'Content' => base64_encode($file), 'ContentType' => $this->determineMimeContentRype($attachment[0]) ); }
return $data; }
protected function determineMimeContentRype($filename){
if(function_exists('mime_content_type')){ return mime_content_type($filename); }elseif(function_exists('finfo_open')){ $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime_type = finfo_file($finfo, $filename); finfo_close($finfo); return $mime_type; }
return 'application/octet-stream'; }
public function load_field(){
$fields = array( 'server_api_token' => array( 'title' => __('Server API Token'), 'type' => 'password', 'desc' => _( 'Follow this link to get a Server API Token from Postmark: <a href="https://account.postmarkapp.com/login" target="_blank">Get Server API Token.</a>' ), ), 'message_stream_id' => array( 'title' => __('Message Stream ID'), 'type' => 'text', 'desc' => _( 'Follow this link to get a Server API Token from Postmark: <a href="https://account.postmarkapp.com/login" target="_blank">Get Server API Token.</a>' ), ), ); return $fields; } }
|