function recordInbound()
 {
     $strJson = file_get_contents("php://input");
     try {
         $arrResponse = Convert::json2array($strJson);
         if ($savedMessage = PostmarkMessage::get()->filter('MessageID', $arrResponse['MessageID'])->first()) {
             return;
         }
         $hash = $arrResponse['ToFull'][0]['MailboxHash'];
         $hashParts = explode('+', $hash);
         $lastMessage = PostmarkMessage::get()->filter(array('UserHash' => $hashParts[0], 'MessageHash' => $hashParts[1]))->first();
         $fromCustomer = PostmarkHelper::find_or_make_client($arrResponse['From']);
         $inboundSignature = null;
         if ($lastMessage) {
             $inboundSignature = $lastMessage->From();
         } else {
             if (!$lastMessage && isset($arrResponse['To'])) {
                 $inboundSignature = PostmarkSignature::get()->filter('Email', $arrResponse['To'])->first();
             }
         }
         if (!$inboundSignature) {
             $inboundSignature = PostmarkSignature::get()->filter('IsDefault', 1)->first();
         }
         $message = new PostmarkMessage(array('Subject' => $arrResponse['Subject'], 'Message' => $arrResponse['HtmlBody'], 'ToID' => 0, 'MessageID' => $arrResponse['MessageID'], 'InReplyToID' => $lastMessage ? $lastMessage->ID : 0, 'FromCustomerID' => $fromCustomer ? $fromCustomer->ID : 0, 'InboundToID' => $inboundSignature ? $inboundSignature->ID : 0));
         $message->write();
         if (isset($arrResponse['Attachments']) && count($arrResponse['Attachments'])) {
             foreach ($arrResponse['Attachments'] as $attachment) {
                 $attachmentObject = new Attachment(array('Content' => $attachment['Content'], 'FileName' => $attachment['Name'], 'ContentType' => $attachment['ContentType'], 'Length' => $attachment['ContentLength'], 'ContentID' => $attachment['ContentID'], 'PostmarkMessageID' => $message->ID));
                 $attachmentObject->write();
             }
         }
     } catch (Exception $e) {
     }
     return 'OK';
 }
 function getSearchFields()
 {
     if ($this->fields && $this->fields->count()) {
         return $this->fields;
     }
     $fields = new FieldList(TextField::create('Name'), TextField::create('Email'), TextField::create('Company'), CheckboxSetField::create('Status')->setSource(CustomerStatus::get()->map()->toArray()), CheckboxSetField::create('Tags')->setSource(CustomerTag::get()->map()->toArray()));
     $locales = PostmarkHelper::MemberLocales();
     if ($locales && count($locales)) {
         $locale = DropdownField::create('Locale')->setSource($locales)->setEmptyString('Select language');
         $fields->insertBefore($locale, 'Name');
     }
     $this->extend('updateCustomerSearchFields', $fields);
     $this->fields = $fields;
     return $this->fields;
 }
 public function sendPostmarked($to, $from, $subject, $htmlContent, $plainContent, $attachedFiles, $customheaders, $signature = null)
 {
     if (empty($signature)) {
         $signature = PostmarkSignature::get()->filter('Email', $from)->first();
     }
     if (!$signature) {
         $signature = PostmarkSignature::get()->filter('IsDefault', 1)->first();
     }
     $client = new PostmarkClient(SiteConfig::current_site_config()->PostmarkToken);
     $customerIDs = PostmarkHelper::client_list()->filter('Email', explode(',', $to))->column('ID');
     $message = null;
     if (is_array($customerIDs) && !empty($customerIDs) && self::$record_emails) {
         $message = new PostmarkMessage(array('Subject' => $subject, 'Message' => $htmlContent, 'PlainMessage' => $plainContent, 'ToID' => implode(',', $customerIDs), 'FromID' => $signature ? $signature->ID : $signature, 'InReplyToID' => self::$reply_to_message));
         $message->write();
     }
     $cc = null;
     if (isset($customheaders['CC'])) {
         $cc = $customheaders['CC'];
         unset($customheaders['CC']);
     }
     if (isset($customheaders['cc'])) {
         $cc = $customheaders['cc'];
         unset($customheaders['cc']);
     }
     $bcc = null;
     if (isset($customheaders['Bcc'])) {
         $bcc = $customheaders['Bcc'];
         unset($customheaders['Bcc']);
     }
     if (isset($customheaders['BCC'])) {
         $bcc = $customheaders['bcc'];
         unset($customheaders['BCC']);
     }
     if (isset($customheaders['bcc'])) {
         $bcc = $customheaders['bcc'];
         unset($customheaders['bcc']);
     }
     $attachments = null;
     if ($attachedFiles && is_array($attachedFiles)) {
         $attachments = array();
         foreach ($attachedFiles as $attachment) {
             $attachments[] = PostmarkAttachment::fromRawData($attachment['contents'], $attachment['filename'], $attachment['mimetype']);
             if (is_array($customerIDs) && !empty($customerIDs) && self::$record_emails) {
                 $postmarkAttachment = new Attachment(array('Content' => base64_encode($attachment['contents']), 'FileName' => $attachment['filename'], 'ContentType' => $attachment['mimetype'], 'PostmarkMessageID' => $message->ID, 'Length' => strlen($attachment['contents'])));
                 $postmarkAttachment->write();
             }
         }
     }
     $arrangedHeaders = null;
     if ($customheaders && is_array($customheaders) && count($customheaders)) {
         $arrangedHeaders = array();
         foreach ($customheaders as $key => $val) {
             $arrangedHeaders[$key] = $val;
         }
     }
     $sendResult = $client->sendEmail($signature ? $signature->Email : $from, $to, $subject, $htmlContent, $plainContent, null, true, $message ? $message->replyToEmailAddress() : $from, $cc, $bcc, $arrangedHeaders, $attachments);
     if (is_array($customerIDs) && !empty($customerIDs) && self::$record_emails && $sendResult->__get('message') == 'OK') {
         $message->MessageID = $sendResult->__get('messageid');
         $message->write();
     }
     return $sendResult->__get('message') == 'OK';
 }
Example #4
0
 public function postmessage($data, $form)
 {
     $signature = PostmarkSignature::get()->byID($data['FromID']);
     PostmarkMailer::RecordEmails(true);
     PostmarkMailer::ReplyToMessageID($data['InReplyToID']);
     $clients = PostmarkHelper::client_list()->filter('ID', $data['ToMemberID']);
     foreach ($clients as $client) {
         $email = new Email($signature->Email, $client->Email, $data['Subject'], PostmarkHelper::MergeEmailText($data['Body'], $client));
         for ($i = 1; $i <= 5; $i += 1) {
             $strKey = 'Attachment_' . $i;
             if (isset($_FILES[$strKey]) && $_FILES[$strKey]['tmp_name']) {
                 $contents = file_get_contents($_FILES[$strKey]['tmp_name']);
                 if (strlen($contents)) {
                     $email->attachFileFromString($contents, $_FILES[$strKey]['name']);
                 }
             }
         }
         $this->extend('updatePostmessage', $email, $data);
         $email->setTemplate('NewsletterTemplate');
         $email->send();
     }
     PostmarkMailer::RecordEmails(false);
     PostmarkMailer::ReplyToMessageID(0);
 }
Example #5
0
 public static function MemberLocales()
 {
     if (self::$locales) {
         return self::$locales;
     }
     self::$locales = array();
     $object = singleton(Config::inst()->get('PostmarkAdmin', 'member_class'));
     if ($db = $object->db()) {
         if (array_key_exists('Locale', $db)) {
             $locales = DB::query('SELECT DISTINCT Locale AS Locale FROM ' . Config::inst()->get('PostmarkAdmin', 'member_class') . ' WHERE Locale IS NOT NULL');
             foreach ($locales as $row) {
                 self::$locales[$row['Locale']] = i18n::get_language_name(substr($row['Locale'], 0, 2));
             }
         }
     }
     return self::$locales;
 }
Example #6
0
 public function getMessage()
 {
     $dbValue = $this->getField('Message');
     $strRet = PostmarkHelper::update_attachments($dbValue);
     return $strRet;
 }