Skip to content

Instantly share code, notes, and snippets.

@ScottPhillips
Forked from drewjoh/example.php
Created March 10, 2012 23:11
Show Gist options
  • Select an option

  • Save ScottPhillips/2013850 to your computer and use it in GitHub Desktop.

Select an option

Save ScottPhillips/2013850 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', $file_as_string, '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;
}
}
@MiguelRandell
Copy link

A simple but useful PHP class for sending emails with Postmarks. It can be a good solution for PHP merge fruit applications that need to send emails with attachments.

@marcos1232-rgb
Copy link

Using Postmark for email sending with attachments is a great approach, especially when handling automated reports or dynamically generated files. If you're working with data-driven emails, precise calculations are often necessary before processing attachments. A tool like [https://aliciacalculadora.net/] can be useful for ensuring accurate computations in such cases.

@securemailpro
Copy link

The Potbelly nutrition section is detailed but not overwhelming, which is rare for menu guides. Easy to read and actually useful. potbelly nutrition

@securemailpro
Copy link

Nice info without being invasive. That balance is important. kompama

@securemailpro
Copy link

Didn’t know much about Nidixfun before this, but the article makes it understandable. Straightforward, no unnecessary filler, and easy to skim through. nidixfun

@securemailpro
Copy link

Gastroshiza is explained nicely here. The content feels researched and easy to understand, even for someone unfamiliar with the topic. Good job keeping it clear. gastroshiza

@securemailpro
Copy link

Loved how you covered Crocolini here. The writing felt natural and easy to follow. Looking forward to more posts like this. Crocolini

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