Skip to content

Instantly share code, notes, and snippets.

@drewjoh
Forked from mloberg/example.php
Last active January 11, 2021 18:06
Show Gist options
  • Star 37 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save drewjoh/1314065 to your computer and use it in GitHub Desktop.
Save drewjoh/1314065 to your computer and use it in GitHub Desktop.
A Simple Postmark PHP Class with Attachments
<?php
require("postmark.php");
$postmark = new Postmark("your-api-key","from-email","optional-reply-to-address");
$result = $postmark->to("reciver@example.com")
->subject("Email Subject")
->plain_message("This is a plain text message.")
->attachment('File.pdf', base64_encode(file_get_contents('sample.pdf')), 'application/pdf')
->send();
if($result === true)
echo "Message sent";
<?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;
}
}
@netswagger
Copy link

I'm having the same issues as hgus. It's like $result is never === true. Is there some other setting I'm missing? I'm running php 5.4.4

@robstarbuck
Copy link

The API is sound, you need to set up a signature in Postmark the from address that you're using in the API will need to be the same as that signature. That should get it working.

https://postmarkapp.com/signatures

@nikhilwason
Copy link

Nice! so far so good. Thanks!

@benrodigas
Copy link

Thanks a lot for this code. Much appreciated!

@revalderc
Copy link

How should I send html email? Please help. Thanks!

Copy link

ghost commented Oct 8, 2018

anyone knows how to download attachments from Json response in django

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment