Last active
July 13, 2017 23:32
-
-
Save karloscarweber/6428526 to your computer and use it in GitHub Desktop.
A CakePHP 2.0 Component That integrates with the Mandrill API. Just enough to get you started, Fill in the gaps.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// App/controllers/components/mandrill.php | |
class MandrillComponent extends Object | |
{ | |
var $components = array('Session', 'RestRequest'); | |
var $settings = array( | |
'host' => 'smtp.mandrillapp.com', | |
'port' => '587', | |
'username' => 'username', | |
'api_key' => 'randomapikey' | |
); | |
/* | |
A Default $request_array for convenience purposes. | |
*/ | |
var $request_array = array( | |
'key' => $this->settings['api_key'], | |
'message'=> array( | |
'html'=> '<p>Example HTML content</p>', | |
'text'=> 'Example text content', | |
'subject'=> 'example subject', | |
'from_email'=> 'message.from_email@example.com', | |
'from_name'=> 'Example Name', | |
'to' => array( | |
/* | |
'0' => array( | |
'email'=> 'recipient.email@example.com', | |
'name'=> 'Resident' | |
), | |
'1' => array( | |
'email'=> 'recipient.email@example.com', | |
'name'=> 'Resident' | |
) | |
*/ | |
), | |
'headers'=> array( | |
'Reply-To'=> 'message.reply@example.com' | |
), | |
'important'=> false, | |
'track_opens'=> null, | |
'track_clicks'=> null, | |
'auto_text'=> null, | |
'auto_html'=> null, | |
'inline_css'=> null, | |
'url_strip_qs'=> null, | |
'preserve_recipients'=> null, | |
'view_content_link'=> null, | |
'bcc_address'=> 'message.bcc_address@example.com', | |
'tracking_domain'=> null, | |
'signing_domain'=> null, | |
'return_path_domain'=> null, | |
'tags'=> array( | |
'notification-email' | |
), | |
'metadata'=> array( | |
'website'=> 'www.example.com' | |
) | |
), | |
'async'=> false, | |
'ip_pool'=> 'Main Pool' | |
); | |
/* | |
When VARS ATTACKS! | |
@param (string)$recipient, the person you're sending the email to. | |
@param (string)$sender, the person who's sending the email. | |
@param (string)$subject, the subject. | |
@param (string)$html, The HTML email, could be just plain text if you wanted. | |
@param (string)$html, indexless array of tags, defaults to just notification-email | |
example request: | |
Mandrill->send_email('me@test.com', 'admin@test.com', 'Subject'. 'Please provide new Credit Card data.', array('billing', 'expired-card')); | |
*/ | |
function send_email($recipient = null, $sender = null, $subject = null, $html = null, $tags = array()) | |
{ | |
if(!empty($tags)){ | |
unset($request_array['message']['tags']); | |
$request_array['message']['tags'] = $tags; | |
} | |
// all the Mandrill sendness | |
$request_array = $this->request_array; | |
$request_array['message']['from_email'] = $sender; | |
$recipient = array('email' => $recipient, 'name' => 'Resident'); | |
$request_array['message']['to'][] = $recipient; | |
debug($request_array['message']['to'][0]['email']); | |
//$request_array['message']['headers']['Reply-To'] = $html['message']['headers']['Reply-To']; | |
$request_array['message']['html'] = $html; | |
$request_array['message']['subject'] = $subject; | |
$request = new $this->RestRequest('https://mandrillapp.com/api/1.0/messages/send.json', 'POST', $request_array); | |
$request->execute(); | |
//$responseObject = json_decode($request->getResponseBody()); | |
//return $responseObject; | |
return $request->getResponseBody(); | |
} | |
/* | |
* | |
* Users Methods | |
* | |
* https://mandrillapp.com/api/docs/users.JSON.html | |
*/ | |
function users_info(){ | |
$data = array( | |
'key' => $this->settings->api_key | |
); | |
// create a new rest requst | |
$request = $this->_make_request('users/info.json', 'POST', $data); | |
$request->execute(); | |
return $request->getResponseBody(); | |
} | |
function users_ping(){ | |
$data = array( | |
'key' => $this->settings->api_key | |
); | |
// create a new rest requst | |
$request = $this->_make_request('users/ping.json', 'POST', $data); | |
$request->execute(); | |
return $request->getResponseBody(); | |
} | |
function users_ping2(){ | |
$data = array( | |
'key' => $this->settings->api_key | |
); | |
// create a new rest requst | |
$request = $this->_make_request('users/ping2.json', 'POST', $data); | |
$request->execute(); | |
return $request->getResponseBody(); | |
} | |
function users_senders(){ | |
$data = array( | |
'key' => $this->settings->api_key | |
); | |
// create a new rest requst | |
$request = $this->_make_request('users/senders.json', 'POST', $data); | |
$request->execute(); | |
return $request->getResponseBody(); | |
} | |
/* | |
* | |
* Messages Methods | |
* | |
* https://mandrillapp.com/api/docs/messages.JSON.html | |
*/ | |
function messages_send($request_data = array()){ | |
if(!empty($request_data)){ | |
$default = $this->_return_default_send_email(); | |
$data = array_merge($default, $request_data); | |
} | |
// create a new rest requst | |
$request = $this->_make_request('users/info.json', 'POST', $data); | |
$request->execute(); | |
return $request->getResponseBody(); | |
} | |
// Utility methods | |
// creat Rest Request | |
function _make_request($method = null, $action = 'POST', $data = array()){ | |
if($method) { | |
$url = "https://mandrillapp.com/api/1.0/" . $method; | |
} | |
if(!empty($data)) { | |
return new $this->RestRequest($url, $action, $data); | |
} else { | |
return false; | |
} | |
} | |
function _return_default_send_email(){ | |
$default = array( | |
"key"=> $this->settings->api_key, | |
"message"=> array( | |
"html"=> "<p>Example HTML content</p>", | |
"text"=> "Example text content", | |
"subject"=> "example subject", | |
"from_email"=> "message.from_email@example.com", | |
"from_name"=> "Example Name", | |
"to"=> array( | |
"email"=> "recipient.email@example.com", | |
"name"=> "Recipient Name", | |
"type"=> "to" | |
), | |
"headers"=> array( | |
"Reply-To"=> "message.reply@example.com" | |
), | |
"important"=> false, | |
"track_opens"=> null, | |
"track_clicks"=> null, | |
"auto_text"=> null, | |
"auto_html"=> null, | |
"inline_css"=> null, | |
"url_strip_qs"=> null, | |
"preserve_recipients"=> null, | |
"view_content_link"=> null, | |
"bcc_address"=> "message.bcc_address@example.com", | |
"tracking_domain"=> null, | |
"signing_domain"=> null, | |
"return_path_domain"=> null, | |
"merge"=> true, | |
"global_merge_vars"=> array( | |
"name"=> "merge1", | |
"content"=> "merge1 content" | |
), | |
"merge_vars"=> array( | |
"rcpt"=> "recipient.email@example.com", | |
"vars"=> array( | |
"name"=> "merge2", | |
"content"=> "merge2 content" | |
) | |
), | |
"tags"=> array( | |
"password-resets" | |
), | |
"subaccount"=> "customer-123", | |
"google_analytics_domains"=> array( | |
"example.com" | |
), | |
"google_analytics_campaign"=> "message.from_email@example.com", | |
"metadata"=> array( | |
"website"=> "www.example.com" | |
), | |
"recipient_metadata"=> array( | |
"rcpt"=> "recipient.email@example.com", | |
"values"=> array( | |
"user_id"=> 123456 | |
) | |
), | |
"attachments"=> array( | |
"type"=> "text/plain", | |
"name"=> "myfile.txt", | |
"content"=> "ZXhhbXBsZSBmaWxl" | |
), | |
"images"=> array( | |
"type"=> "image/png", | |
"name"=> "IMAGECID", | |
"content"=> "ZXhhbXBsZSBmaWxl" | |
) | |
), | |
"async"=> false, | |
"ip_pool"=> "Main Pool", | |
"send_at"=> "example send_at" | |
); | |
return $default; | |
} | |
} | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? | |
// App/controllers/mandrill_controller.php | |
class MandrillController extends AppController { | |
var $name = 'Mandrill'; | |
var $components = array( 'Mandrill'); | |
//var $helpers = array(); | |
/* | |
This sends a rest( | |
@param $recipient = null, $string | |
@param $sender = null, $string | |
@param $subject = null, $string | |
@param $html = null, $string | |
*/ | |
function rest() | |
{ | |
// $this->Mandrill->send_email($recipient = null, $sender = null, $subject = null, $html = null) | |
$message = "<p>This is the response message hardcore</p>"; | |
$subject = "Your Laundry is ready"; | |
$result = $this->Mandrill->send_email('example_email@gmail.com', 'admin@example.com', $subject, $message); | |
debug($result); | |
die; | |
} | |
} | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// App/controllers/components/rest_request.php | |
// shamelessly lifted from: http://www.gen-x-design.com/archives/making-restful-requests-in-php/ | |
// slightly modified | |
class RestRequestComponent extends Object | |
{ | |
var $components = array('Session'); | |
protected $url; | |
protected $verb; | |
protected $requestBody; | |
protected $requestLength; | |
protected $username; | |
protected $password; | |
protected $acceptType; | |
protected $responseBody; | |
protected $responseInfo; | |
public function __construct ($url = null, $verb = 'GET', $requestBody = null) | |
{ | |
$this->url = $url; | |
$this->verb = $verb; | |
$this->requestBody = $requestBody; | |
$this->requestLength = 0; | |
$this->username = null; | |
$this->password = null; | |
$this->acceptType = 'application/json'; | |
$this->responseBody = null; | |
$this->responseInfo = null; | |
if ($this->requestBody !== null) | |
{ | |
$this->buildPostBody(); | |
} | |
} | |
public function flush () | |
{ | |
$this->requestBody = null; | |
$this->requestLength = 0; | |
$this->verb = 'GET'; | |
$this->responseBody = null; | |
$this->responseInfo = null; | |
} | |
public function execute () | |
{ | |
$ch = curl_init(); | |
$this->setAuth($ch); | |
try | |
{ | |
switch (strtoupper($this->verb)) | |
{ | |
case 'GET': | |
$this->executeGet($ch); | |
break; | |
case 'POST': | |
$this->executePost($ch); | |
break; | |
case 'PUT': | |
$this->executePut($ch); | |
break; | |
case 'DELETE': | |
$this->executeDelete($ch); | |
break; | |
default: | |
throw new InvalidArgumentException('Current verb (' . $this->verb . ') is an invalid REST verb.'); | |
} | |
} | |
catch (InvalidArgumentException $e) | |
{ | |
curl_close($ch); | |
throw $e; | |
} | |
catch (Exception $e) | |
{ | |
curl_close($ch); | |
throw $e; | |
} | |
} | |
public function buildPostBody ($data = null) | |
{ | |
$data = ($data !== null) ? $data : $this->requestBody; | |
if (!is_array($data)) | |
{ | |
throw new InvalidArgumentException('Invalid data input for postBody. Array expected'); | |
} | |
$data = http_build_query($data, '', '&'); | |
$this->requestBody = $data; | |
} | |
protected function executeGet ($ch) | |
{ | |
$this->doExecute($ch); | |
} | |
protected function executePost ($ch) | |
{ | |
if (!is_string($this->requestBody)) | |
{ | |
$this->buildPostBody(); | |
} | |
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->requestBody); | |
curl_setopt($ch, CURLOPT_POST, 1); | |
$this->doExecute($ch); | |
} | |
protected function executePut ($ch) | |
{ | |
if (!is_string($this->requestBody)) | |
{ | |
$this->buildPostBody(); | |
} | |
$this->requestLength = strlen($this->requestBody); | |
$fh = fopen('php://memory', 'rw'); | |
fwrite($fh, $this->requestBody); | |
rewind($fh); | |
curl_setopt($ch, CURLOPT_INFILE, $fh); | |
curl_setopt($ch, CURLOPT_INFILESIZE, $this->requestLength); | |
curl_setopt($ch, CURLOPT_PUT, true); | |
$this->doExecute($ch); | |
fclose($fh); | |
} | |
protected function executeDelete ($ch) | |
{ | |
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); | |
$this->doExecute($ch); | |
} | |
protected function doExecute (&$curlHandle) | |
{ | |
$this->setCurlOpts($curlHandle); | |
$this->responseBody = curl_exec($curlHandle); | |
$this->responseInfo = curl_getinfo($curlHandle); | |
curl_close($curlHandle); | |
} | |
protected function setCurlOpts (&$curlHandle) | |
{ | |
curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10); | |
curl_setopt($curlHandle, CURLOPT_URL, $this->url); | |
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true); | |
if( isset( $_SESSION['login_token'] ) ){ | |
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array ( | |
'Accept: ' . $this->acceptType, | |
'X-Pipejump-Auth: ' . $_SESSION['login_token'])); | |
}else { | |
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array ('Accept: ' . $this->acceptType)); | |
} | |
} | |
protected function setAuth (&$curlHandle) | |
{ | |
if ($this->username !== null && $this->password !== null) | |
{ | |
curl_setopt($curlHandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); | |
curl_setopt($curlHandle, CURLOPT_USERPWD, $this->username . ':' . $this->password); | |
} | |
} | |
public function getAcceptType () | |
{ | |
return $this->acceptType; | |
} | |
public function setAcceptType ($acceptType) | |
{ | |
$this->acceptType = $acceptType; | |
} | |
public function getPassword () | |
{ | |
return $this->password; | |
} | |
public function setPassword ($password) | |
{ | |
$this->password = $password; | |
} | |
public function getResponseBody () | |
{ | |
return $this->responseBody; | |
} | |
public function getResponseInfo () | |
{ | |
return $this->responseInfo; | |
} | |
public function getUrl () | |
{ | |
return $this->url; | |
} | |
public function setUrl ($url) | |
{ | |
$this->url = $url; | |
} | |
public function getUsername () | |
{ | |
return $this->username; | |
} | |
public function setUsername ($username) | |
{ | |
$this->username = $username; | |
} | |
public function getVerb () | |
{ | |
return $this->verb; | |
} | |
public function setVerb ($verb) | |
{ | |
$this->verb = $verb; | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment