summaryrefslogtreecommitdiff
path: root/Postman/Postman-Mail/sendgrid-php-3.2.0/lib/SendGrid.php
diff options
context:
space:
mode:
Diffstat (limited to 'Postman/Postman-Mail/sendgrid-php-3.2.0/lib/SendGrid.php')
-rw-r--r--Postman/Postman-Mail/sendgrid-php-3.2.0/lib/SendGrid.php156
1 files changed, 156 insertions, 0 deletions
diff --git a/Postman/Postman-Mail/sendgrid-php-3.2.0/lib/SendGrid.php b/Postman/Postman-Mail/sendgrid-php-3.2.0/lib/SendGrid.php
new file mode 100644
index 0000000..5b775b2
--- /dev/null
+++ b/Postman/Postman-Mail/sendgrid-php-3.2.0/lib/SendGrid.php
@@ -0,0 +1,156 @@
+<?php
+
+class SendGrid
+{
+ const VERSION = '3.2.0';
+
+ protected
+ $namespace = 'SendGrid',
+ $headers = array('Content-Type' => 'application/json'),
+ $client,
+ $options;
+
+ public
+ $apiUser,
+ $apiKey,
+ $url,
+ $endpoint,
+ $version = self::VERSION;
+
+ public function __construct($apiUserOrKey, $apiKeyOrOptions = null, $options = array())
+ {
+ // Check if given a username + password or api key
+ if (is_string($apiKeyOrOptions)) {
+ // Username and password
+ $this->apiUser = $apiUserOrKey;
+ $this->apiKey = $apiKeyOrOptions;
+ $this->options = $options;
+ } elseif (is_array($apiKeyOrOptions) || $apiKeyOrOptions === null) {
+ // API key
+ $this->apiKey = $apiUserOrKey;
+ $this->apiUser = null;
+
+ // With options
+ if (is_array($apiKeyOrOptions)) {
+ $this->options = $apiKeyOrOptions;
+ }
+ } else {
+ // Won't be thrown?
+ throw new InvalidArgumentException('Need a username + password or api key!');
+ }
+
+ $this->options['turn_off_ssl_verification'] = (isset($this->options['turn_off_ssl_verification']) && $this->options['turn_off_ssl_verification'] == true);
+ if (!isset($this->options['raise_exceptions'])) {
+ $this->options['raise_exceptions'] = true;
+ }
+ $protocol = isset($this->options['protocol']) ? $this->options['protocol'] : 'https';
+ $host = isset($this->options['host']) ? $this->options['host'] : 'api.sendgrid.com';
+ $port = isset($this->options['port']) ? $this->options['port'] : '';
+
+ $this->url = isset($this->options['url']) ? $this->options['url'] : $protocol . '://' . $host . ($port ? ':' . $port : '');
+ $this->endpoint = isset($this->options['endpoint']) ? $this->options['endpoint'] : '/api/mail.send.json';
+
+ $this->client = $this->prepareHttpClient();
+ }
+
+ /**
+ * Prepares the HTTP client
+ *
+ * @return \Guzzle\Http\Client
+ */
+ private function prepareHttpClient()
+ {
+ $guzzleOption = array(
+ 'request.options' => array(
+ 'verify' => !$this->options['turn_off_ssl_verification'],
+ 'exceptions' => (isset($this->options['enable_guzzle_exceptions']) && $this->options['enable_guzzle_exceptions'] == true)
+ )
+ );
+
+ // Using api key
+ if ($this->apiUser === null) {
+ $guzzleOption['request.options']['headers'] = array('Authorization' => 'Bearer ' . $this->apiKey);
+ }
+
+ // Using http proxy
+ if (isset($this->options['proxy'])) {
+ $guzzleOption['request.options']['proxy'] = $this->options['proxy'];
+ }
+
+ $client = new \Guzzle\Http\Client($this->url, $guzzleOption);
+ $client->setUserAgent('sendgrid/' . $this->version . ';php');
+
+ return $client;
+ }
+
+ /**
+ * @return array The protected options array
+ */
+ public function getOptions()
+ {
+ return $this->options;
+ }
+
+ /**
+ * Makes a post request to SendGrid to send an email
+ *
+ * @param SendGrid\Email $email Email object built
+ *
+ * @throws SendGrid\Exception if the response code is not 200
+ * @return stdClass SendGrid response object
+ */
+ public function send(SendGrid\Email $email)
+ {
+ $form = $email->toWebFormat();
+
+ // Using username password
+ if ($this->apiUser !== null) {
+ $form['api_user'] = $this->apiUser;
+ $form['api_key'] = $this->apiKey;
+ }
+
+ $response = $this->postRequest($this->endpoint, $form);
+
+ if ($response->code != 200 && $this->options['raise_exceptions']) {
+ throw new SendGrid\Exception($response->raw_body, $response->code);
+ }
+
+ return $response;
+ }
+
+ /**
+ * Makes the actual HTTP request to SendGrid
+ *
+ * @param $endpoint string endpoint to post to
+ * @param $form array web ready version of SendGrid\Email
+ *
+ * @return SendGrid\Response
+ */
+ public function postRequest($endpoint, $form)
+ {
+ $req = $this->client->post($endpoint, null, $form);
+
+ $res = $req->send();
+
+ $response = new SendGrid\Response($res->getStatusCode(), $res->getHeaders(), $res->getBody(true), $res->json());
+
+ return $response;
+ }
+
+ public static function register_autoloader()
+ {
+ spl_autoload_register(array('SendGrid', 'autoloader'));
+ }
+
+ public static function autoloader($class)
+ {
+ // Check that the class starts with 'SendGrid'
+ if ($class == 'SendGrid' || stripos($class, 'SendGrid\\') === 0) {
+ $file = str_replace('\\', '/', $class);
+
+ if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) {
+ require_once(dirname(__FILE__) . '/' . $file . '.php');
+ }
+ }
+ }
+}