<?php
 
/**
* This is a simple library for sending emails with Postmark.
* Created by Matthew Loberg (http://mloberg.com), extended and modified by Drew Johnston (http://drewjoh.com).
*/
 
class Postmark {
 
   private $api_key;
   private $attachment_count = 0;
   private $data = array();
 
   function __construct($key, $from, $reply = '')
   {
      $this->api_key = $key;
      $this->data['From'] = $from;
      $this->data['ReplyTo'] = $reply;
   }
 
   function send()
   {
      $headers = array(
         'Accept: application/json',
         'Content-Type: application/json',
         'X-Postmark-Server-Token: '.$this->api_key
      );
      
      $ch = curl_init('http://api.postmarkapp.com/email');
      
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->data));
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
   
      $return = curl_exec($ch);
      $curl_error = curl_error($ch);
      $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      
      curl_close($ch);
      
      // do some checking to make sure it sent
      if($http_code !== 200)
         return false;
      else
         return true;
   }
 
   function to($to)
   {
      $this->data['To'] = $to;
      return $this;
   }
   
   function cc($cc)
   {
      $this->data["Cc"] = $cc;
      return $this;
   }
   
   function bcc($bcc)
   {
      $this->data["Bcc"] = $bcc;
      return $this;
   }
      
   function subject($subject)
   {
      $this->data['Subject'] = $subject;
      return $this;
   }
 
   function html_message($html)
   {
      $this->data['HtmlBody'] = $html;
      return $this;
   }
 
   function plain_message($msg)
   {
      $this->data['TextBody'] = $msg;
      return $this;
   }
 
   function tag($tag)
   {
      $this->data['Tag'] = $tag;
      return $this;
   }
   
   function attachment($name, $content, $content_type)
   {
      $this->data['Attachments'][$this->attachment_count]['Name']    = $name;
      $this->data['Attachments'][$this->attachment_count]['ContentType']   = $content_type;
      
      // Check if our content is already base64 encoded or not
      if( ! base64_decode($content, true))
         $this->data['Attachments'][$this->attachment_count]['Content'] = base64_encode($content);
      else
         $this->data['Attachments'][$this->attachment_count]['Content'] = $content;
      
      // Up our attachment counter
      $this->attachment_count++;
      
      return $this;
   }
 
}
