postmark 1.22.0 → 1.22.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.rdoc +7 -0
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +4 -1
- data/LICENSE +1 -1
- data/README.md +19 -14
- data/RELEASE.md +4 -4
- data/VERSION +1 -1
- data/lib/postmark/error.rb +4 -3
- data/lib/postmark/version.rb +1 -1
- data/postmark.gemspec +2 -3
- data/spec/unit/postmark/error_spec.rb +14 -21
- data/spec/unit/postmark/inbound_spec.rb +1 -1
- data/spec/unit/postmark/message_extensions/mail_spec.rb +3 -3
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65048304ac65a25c53918528a483e99f0c74ea5474c11348c978d8fb732dc032
|
4
|
+
data.tar.gz: 3e90058072e9e549846850fb3c352e963cc7c32468792e10d37662a63b036f03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b25f7ea69f5b3db0260ad29c70b464cf757ed2f3f3b9abb45383aa8c4239516cbc9132bc67200f56faa08563e5cfcf391be086d845bf5baf03223106dd3e7cae
|
7
|
+
data.tar.gz: 7fefb6ced2722b022b27ed06bd5cde4c388e373cfc75995dfb549534618a48e7106281514f9c06d6aba280d472c8211b39a4bffcaff9e61f43aa5017b0a260f7
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.
|
1
|
+
ruby-2.7.5
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
|
+
== 1.22.2
|
4
|
+
* Updated Postmark::InactiveRecipientError.parse_recipients method to handle current error message
|
5
|
+
* Update post install message to use https URL
|
6
|
+
|
7
|
+
== 1.22.1
|
8
|
+
* Migrated to ActiveCampaign
|
9
|
+
|
3
10
|
== 1.22.0
|
4
11
|
|
5
12
|
* Disabled automatic retries of failed requests by default. You can enabled it by passing `max_retries` option to the client constructor.
|
data/CONTRIBUTING.md
CHANGED
@@ -14,5 +14,5 @@ If you’d like to submit a pull request:
|
|
14
14
|
* Do not mess with rakefile, version, or history.
|
15
15
|
* Update the CHANGELOG, list your changes under Unreleased.
|
16
16
|
* Update the README if necessary.
|
17
|
-
* Write short, descriptive commit messages, following the format used in
|
17
|
+
* Write short, descriptive commit messages, following the format used in the repo.
|
18
18
|
* Send a pull request. Bonus points for topic branches.
|
data/Gemfile
CHANGED
@@ -11,5 +11,8 @@ group :test do
|
|
11
11
|
gem 'mime-types'
|
12
12
|
gem 'activesupport'
|
13
13
|
gem 'i18n', '~> 0.6.0'
|
14
|
-
|
14
|
+
|
15
|
+
# To support Ruby version <= 2.6
|
16
|
+
gem 'minitest', '<= 5.15.0'
|
17
|
+
gem 'yajl-ruby', '<= 1.4.1', :platforms => [:mingw, :mswin, :ruby]
|
15
18
|
end
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -3,31 +3,32 @@
|
|
3
3
|
</a>
|
4
4
|
|
5
5
|
# Postmark Ruby Gem
|
6
|
-
|
7
|
-
[![
|
6
|
+
|
7
|
+
[![Build Status](https://circleci.com/gh/ActiveCampaign/postmark-gem.svg?style=shield)](https://circleci.com/gh/ActiveCampaign/postmark-gem)
|
8
|
+
[![Code Climate](https://codeclimate.com/github/ActiveCampaign/postmark-gem/badges/gpa.svg)](https://codeclimate.com/github/ActiveCampaign/postmark-gem)
|
8
9
|
[![License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://www.opensource.org/licenses/MIT)
|
9
10
|
[![Gem Version](https://badge.fury.io/rb/postmark.svg)](https://badge.fury.io/rb/postmark)
|
10
11
|
|
11
12
|
Postmark allows you to send your emails with high delivery rates. It also includes detailed statistics. In addition, Postmark can parse incoming emails which are forwarded back to your application.
|
12
13
|
|
13
|
-
This gem is the official wrapper for the [Postmark HTTP API](
|
14
|
+
This gem is the official wrapper for the [Postmark HTTP API](https://postmarkapp.com).
|
14
15
|
|
15
16
|
## Usage
|
16
17
|
|
17
|
-
Please see the [wiki](https://github.com/
|
18
|
+
Please see the [wiki](https://github.com/ActiveCampaign/postmark-gem/wiki) for detailed instructions about sending email, using the bounce api and other Postmark API features.
|
18
19
|
For details about Postmark API in general, please check out [Postmark developer docs](https://postmarkapp.com/developer).
|
19
20
|
|
20
21
|
## Requirements
|
21
22
|
|
22
|
-
You will need a Postmark account, server and sender signature (or verified domain) set up to use it. For details about setup, check out [wiki pages](https://github.com/
|
23
|
+
You will need a Postmark account, server and sender signature (or verified domain) set up to use it. For details about setup, check out [wiki pages](https://github.com/ActiveCampaign/postmark-gem/wiki/Getting-Started).
|
23
24
|
|
24
|
-
If you plan using the library in a Rails project, check out the [postmark-rails](https://github.com/
|
25
|
+
If you plan using the library in a Rails project, check out the [postmark-rails](https://github.com/ActiveCampaign/postmark-rails/) gem, which
|
25
26
|
is meant to integrate with ActionMailer. The plugin will try to use ActiveSupport JSon if it is already included. If not,
|
26
27
|
it will attempt to use the built-in Ruby JSon library.
|
27
28
|
|
28
29
|
You can also explicitly specify which one to be used, using following code:
|
29
30
|
|
30
|
-
```
|
31
|
+
```ruby
|
31
32
|
Postmark.response_parser_class = :Json # :ActiveSupport or :Yajl are also supported.
|
32
33
|
```
|
33
34
|
|
@@ -37,13 +38,13 @@ You can use the library with or without a Bundler.
|
|
37
38
|
|
38
39
|
With Bundler:
|
39
40
|
|
40
|
-
```
|
41
|
+
```ruby
|
41
42
|
gem 'postmark'
|
42
43
|
```
|
43
44
|
|
44
45
|
Without Bundler:
|
45
46
|
|
46
|
-
```
|
47
|
+
```bash
|
47
48
|
gem install postmark
|
48
49
|
```
|
49
50
|
|
@@ -53,14 +54,18 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) file for details.
|
|
53
54
|
|
54
55
|
## Issues & Comments
|
55
56
|
|
56
|
-
Feel free to contact us if you encounter any issues with the library or Postmark API.
|
57
|
-
Please leave all comments, bugs, requests and issues on the Issues page.
|
57
|
+
Feel free to contact us if you encounter any issues with the library or Postmark API.
|
58
|
+
Please leave all comments, bugs, requests and issues on the Issues page.
|
58
59
|
|
59
60
|
## License
|
60
61
|
|
61
|
-
The Postmark Ruby library is licensed under the [MIT](http://www.opensource.org/licenses/mit-license.php) license.
|
62
|
-
Refer to the [LICENSE](https://github.com/
|
62
|
+
The Postmark Ruby library is licensed under the [MIT](http://www.opensource.org/licenses/mit-license.php) license.
|
63
|
+
Refer to the [LICENSE](https://github.com/ActiveCampaign/postmark-gem/blob/main/LICENSE) file for more information.
|
64
|
+
|
65
|
+
## Tests
|
66
|
+
|
67
|
+
The [integration tests](https://github.com/ActiveCampaign/postmark-gem/tree/main/spec/integration) currently use a real test email address, configured via `POSTMARK_CI_RECIPIENT`. The credentials for it can be found in the internal 1password vault under `Postmark - Ruby - Client Library - Account`.
|
63
68
|
|
64
69
|
## Copyright
|
65
70
|
|
66
|
-
Copyright ©
|
71
|
+
Copyright © 2022 ActiveCampaign LLC.
|
data/RELEASE.md
CHANGED
@@ -2,12 +2,12 @@ New versions of the gem are cut by the Postmark team, this is a quick guide to e
|
|
2
2
|
|
3
3
|
1. Determine the next version of the gem by following the [SemVer](https://semver.org/) guidelines.
|
4
4
|
1. Verify all builds are passing on CircleCI for your branch.
|
5
|
-
1. Merge in your branch to
|
5
|
+
1. Merge in your branch to main.
|
6
6
|
1. Update VERSION and lib/postmark/version.rb with the new version.
|
7
7
|
1. Update CHANGELOG.rdoc with a brief description of the changes.
|
8
8
|
1. Commit to git with a comment of "Bump version to x.y.z".
|
9
9
|
1. run `rake release` - This will push to github(with the version tag) and rubygems with the version in lib/postmark/version.rb.
|
10
10
|
*Note that if you're on Bundler 1.17 there's a bug that hides the prompt for your OTP. If it hangs after adding the tag then it's asking for your OTP, enter your OTP and press Enter. Bundler 2.x and beyond resolved this issue. *
|
11
|
-
1. Verify the new version is on [github](https://github.com/
|
12
|
-
1. Create a new release for the version on [Github releases](https://github.com/
|
13
|
-
1. Add or update any related content to the [wiki](https://github.com/
|
11
|
+
1. Verify the new version is on [github](https://github.com/ActiveCampaign/postmark-gem) and [rubygems](https://rubygems.org/gems/postmark).
|
12
|
+
1. Create a new release for the version on [Github releases](https://github.com/ActiveCampaign/postmark-gem/releases).
|
13
|
+
1. Add or update any related content to the [wiki](https://github.com/ActiveCampaign/postmark-gem/wiki).
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.22.
|
1
|
+
1.22.2
|
data/lib/postmark/error.rb
CHANGED
@@ -75,9 +75,10 @@ module Postmark
|
|
75
75
|
class InactiveRecipientError < ApiInputError
|
76
76
|
attr_reader :recipients
|
77
77
|
|
78
|
-
PATTERNS = [
|
79
|
-
|
80
|
-
|
78
|
+
PATTERNS = [
|
79
|
+
/Found inactive addresses: (.+?)\. Inactive/,
|
80
|
+
/these inactive addresses: (.+?)\.?$/
|
81
|
+
].freeze
|
81
82
|
|
82
83
|
def self.parse_recipients(message)
|
83
84
|
PATTERNS.each do |p|
|
data/lib/postmark/version.rb
CHANGED
data/postmark.gemspec
CHANGED
@@ -5,12 +5,11 @@ require "postmark/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "postmark"
|
7
7
|
s.version = Postmark::VERSION
|
8
|
-
s.homepage = "
|
8
|
+
s.homepage = "https://postmarkapp.com"
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
10
|
s.license = 'MIT'
|
11
11
|
|
12
12
|
s.authors = ["Tomek Maszkowski", "Igor Balos", "Artem Chistyakov", "Nick Hammond", "Petyo Ivanov", "Ilya Sabanin"]
|
13
|
-
s.email = "tomek@wildbit.com"
|
14
13
|
s.extra_rdoc_files = ["LICENSE", "README.md"]
|
15
14
|
s.rdoc_options = ["--charset=UTF-8"]
|
16
15
|
|
@@ -25,7 +24,7 @@ Gem::Specification.new do |s|
|
|
25
24
|
s.post_install_message = %q{
|
26
25
|
==================
|
27
26
|
Thanks for installing the postmark gem. If you don't have an account, please
|
28
|
-
sign up at
|
27
|
+
sign up at https://postmarkapp.com/.
|
29
28
|
|
30
29
|
Review the README.md for implementation details and examples.
|
31
30
|
==================
|
@@ -179,33 +179,22 @@ end
|
|
179
179
|
describe(Postmark::InactiveRecipientError) do
|
180
180
|
describe '.parse_recipients' do
|
181
181
|
let(:recipients) do
|
182
|
-
%w(nothing@
|
182
|
+
%w(nothing@postmarkapp.com noth.ing+2@postmarkapp.com noth.ing+2-1@postmarkapp.com)
|
183
183
|
end
|
184
184
|
|
185
185
|
subject {Postmark::InactiveRecipientError.parse_recipients(message)}
|
186
186
|
|
187
187
|
context '1/1 inactive' do
|
188
188
|
let(:message) do
|
189
|
-
|
190
|
-
"inactive.\nFound inactive addresses: #{recipients[0]}.\n" \
|
191
|
-
'Inactive recipients are ones that have generated a hard ' \
|
192
|
-
'bounce or a spam complaint.'
|
189
|
+
all_recipients_inactive_message(recipients[0])
|
193
190
|
end
|
194
191
|
|
195
192
|
it {is_expected.to eq(recipients.take(1))}
|
196
193
|
end
|
197
194
|
|
198
|
-
context 'i/n inactive, n > 1, i < n - new message format' do
|
199
|
-
let(:message) { "Message OK, but will not deliver to these inactive addresses: #{recipients[0...2].join(', ')}" }
|
200
|
-
|
201
|
-
it {is_expected.to eq(recipients.take(2))}
|
202
|
-
end
|
203
|
-
|
204
195
|
context 'i/n inactive, n > 1, i < n' do
|
205
196
|
let(:message) do
|
206
|
-
'
|
207
|
-
"#{recipients[0...2].join(', ')}. Inactive recipients are ones that " \
|
208
|
-
'have generated a hard bounce or a spam complaint.'
|
197
|
+
some_recipients_inactive_message(recipients[0...2].join(', '))
|
209
198
|
end
|
210
199
|
|
211
200
|
it {is_expected.to eq(recipients.take(2))}
|
@@ -213,9 +202,7 @@ describe(Postmark::InactiveRecipientError) do
|
|
213
202
|
|
214
203
|
context 'n/n inactive, n > 1' do
|
215
204
|
let(:message) do
|
216
|
-
'
|
217
|
-
"inactive.\nFound inactive addresses: #{recipients.join(', ')}.\n" \
|
218
|
-
'Inactive recipients are ones that have generated a hard bounce or a spam complaint.'
|
205
|
+
all_recipients_inactive_message(recipients.join(', '))
|
219
206
|
end
|
220
207
|
|
221
208
|
it {is_expected.to eq(recipients)}
|
@@ -240,10 +227,7 @@ describe(Postmark::InactiveRecipientError) do
|
|
240
227
|
end
|
241
228
|
|
242
229
|
let(:message) do
|
243
|
-
|
244
|
-
"inactive.\nFound inactive addresses: #{address}.\n" \
|
245
|
-
'Inactive recipients are ones that have generated a hard ' \
|
246
|
-
'bounce or a spam complaint.'
|
230
|
+
all_recipients_inactive_message(address)
|
247
231
|
end
|
248
232
|
|
249
233
|
it 'parses recipients from json payload' do
|
@@ -262,6 +246,15 @@ describe(Postmark::InactiveRecipientError) do
|
|
262
246
|
expect(subject.error_code).to eq(Postmark::ApiInputError::INACTIVE_RECIPIENT)
|
263
247
|
end
|
264
248
|
end
|
249
|
+
|
250
|
+
def some_recipients_inactive_message(addresses)
|
251
|
+
"Message OK, but will not deliver to these inactive addresses: #{addresses}."
|
252
|
+
end
|
253
|
+
|
254
|
+
def all_recipients_inactive_message(addresses)
|
255
|
+
"You tried to send to recipient(s) that have been marked as inactive. Found inactive addresses: #{addresses}. " \
|
256
|
+
"Inactive recipients are ones that have generated a hard bounce, a spam complaint, or a manual suppression."
|
257
|
+
end
|
265
258
|
end
|
266
259
|
|
267
260
|
describe(Postmark::DeliveryError) do
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Postmark::Inbound do
|
4
4
|
# http://developer.postmarkapp.com/developer-inbound-parse.html#example-hook
|
5
|
-
let(:example_inbound) { '{"From":"myUser@theirDomain.com","FromFull":{"Email":"myUser@theirDomain.com","Name":"John Doe"},"To":"451d9b70cf9364d23ff6f9d51d870251569e+ahoy@inbound.postmarkapp.com","ToFull":[{"Email":"451d9b70cf9364d23ff6f9d51d870251569e+ahoy@inbound.postmarkapp.com","Name":""}],"Cc":"\"Full name\" <sample.cc@emailDomain.com>, \"Another Cc\" <another.cc@emailDomain.com>","CcFull":[{"Email":"sample.cc@emailDomain.com","Name":"Full name"},{"Email":"another.cc@emailDomain.com","Name":"Another Cc"}],"ReplyTo":"myUsersReplyAddress@theirDomain.com","Subject":"This is an inbound message","MessageID":"22c74902-a0c1-4511-804f2-341342852c90","Date":"Thu, 5 Apr 2012 16:59:01 +0200","MailboxHash":"ahoy","TextBody":"[ASCII]","HtmlBody":"[HTML(encoded)]","Tag":"","Headers":[{"Name":"X-Spam-Checker-Version","Value":"SpamAssassin 3.3.1 (2010-03-16) onrs-ord-pm-inbound1.
|
5
|
+
let(:example_inbound) { '{"From":"myUser@theirDomain.com","FromFull":{"Email":"myUser@theirDomain.com","Name":"John Doe"},"To":"451d9b70cf9364d23ff6f9d51d870251569e+ahoy@inbound.postmarkapp.com","ToFull":[{"Email":"451d9b70cf9364d23ff6f9d51d870251569e+ahoy@inbound.postmarkapp.com","Name":""}],"Cc":"\"Full name\" <sample.cc@emailDomain.com>, \"Another Cc\" <another.cc@emailDomain.com>","CcFull":[{"Email":"sample.cc@emailDomain.com","Name":"Full name"},{"Email":"another.cc@emailDomain.com","Name":"Another Cc"}],"ReplyTo":"myUsersReplyAddress@theirDomain.com","Subject":"This is an inbound message","MessageID":"22c74902-a0c1-4511-804f2-341342852c90","Date":"Thu, 5 Apr 2012 16:59:01 +0200","MailboxHash":"ahoy","TextBody":"[ASCII]","HtmlBody":"[HTML(encoded)]","Tag":"","Headers":[{"Name":"X-Spam-Checker-Version","Value":"SpamAssassin 3.3.1 (2010-03-16) onrs-ord-pm-inbound1.postmarkapp.com"},{"Name":"X-Spam-Status","Value":"No"},{"Name":"X-Spam-Score","Value":"-0.1"},{"Name":"X-Spam-Tests","Value":"DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_PASS"},{"Name":"Received-SPF","Value":"Pass (sender SPF authorized) identity=mailfrom; client-ip=209.85.160.180; helo=mail-gy0-f180.google.com; envelope-from=myUser@theirDomain.com; receiver=451d9b70cf9364d23ff6f9d51d870251569e+ahoy@inbound.postmarkapp.com"},{"Name":"DKIM-Signature","Value":"v=1; a=rsa-sha256; c=relaxed\/relaxed; d=postmarkapp.com; s=google; h=mime-version:reply-to:date:message-id:subject:from:to:cc :content-type; bh=cYr\/+oQiklaYbBJOQU3CdAnyhCTuvemrU36WT7cPNt0=; b=QsegXXbTbC4CMirl7A3VjDHyXbEsbCUTPL5vEHa7hNkkUTxXOK+dQA0JwgBHq5C+1u iuAJMz+SNBoTqEDqte2ckDvG2SeFR+Edip10p80TFGLp5RucaYvkwJTyuwsA7xd78NKT Q9ou6L1hgy\/MbKChnp2kxHOtYNOrrszY3JfQM="},{"Name":"MIME-Version","Value":"1.0"},{"Name":"Message-ID","Value":"<CAGXpo2WKfxHWZ5UFYCR3H_J9SNMG+5AXUovfEFL6DjWBJSyZaA@mail.gmail.com>"}],"Attachments":[{"Name":"myimage.png","Content":"[BASE64-ENCODED CONTENT]","ContentType":"image/png","ContentLength":4096},{"Name":"mypaper.doc","Content":"[BASE64-ENCODED CONTENT]","ContentType":"application/msword","ContentLength":16384}]}' }
|
6
6
|
|
7
7
|
context "given a serialized inbound document" do
|
8
8
|
subject { Postmark::Inbound.to_ruby_hash(example_inbound) }
|
@@ -219,9 +219,9 @@ describe Mail::Message do
|
|
219
219
|
|
220
220
|
describe "#export_headers" do
|
221
221
|
let(:mail_message_with_reserved_headers) do
|
222
|
-
mail_message.header['Return-Path'] = 'bounce@
|
223
|
-
mail_message.header['From'] = 'info@
|
224
|
-
mail_message.header['Sender'] = 'info@
|
222
|
+
mail_message.header['Return-Path'] = 'bounce@postmarkapp.com'
|
223
|
+
mail_message.header['From'] = 'info@postmarkapp.com'
|
224
|
+
mail_message.header['Sender'] = 'info@postmarkapp.com'
|
225
225
|
mail_message.header['Received'] = 'from mta.pstmrk.it ([72.14.252.155]:54907)'
|
226
226
|
mail_message.header['Date'] = 'January 25, 2013 3:30:58 PM PDT'
|
227
227
|
mail_message.header['Content-Type'] = 'application/json'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postmark
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.22.
|
4
|
+
version: 1.22.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomek Maszkowski
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2022-11-22 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: json
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
version: '0'
|
60
60
|
description: Use this gem to send emails through Postmark HTTP API and retrieve info
|
61
61
|
about bounces.
|
62
|
-
email:
|
62
|
+
email:
|
63
63
|
executables: []
|
64
64
|
extensions: []
|
65
65
|
extra_rdoc_files:
|
@@ -129,12 +129,12 @@ files:
|
|
129
129
|
- spec/unit/postmark/mail_message_converter_spec.rb
|
130
130
|
- spec/unit/postmark/message_extensions/mail_spec.rb
|
131
131
|
- spec/unit/postmark_spec.rb
|
132
|
-
homepage:
|
132
|
+
homepage: https://postmarkapp.com
|
133
133
|
licenses:
|
134
134
|
- MIT
|
135
135
|
metadata: {}
|
136
136
|
post_install_message: "\n ==================\n Thanks for installing the postmark
|
137
|
-
gem. If you don't have an account, please\n sign up at
|
137
|
+
gem. If you don't have an account, please\n sign up at https://postmarkapp.com/.\n\n
|
138
138
|
\ Review the README.md for implementation details and examples.\n ==================\n
|
139
139
|
\ "
|
140
140
|
rdoc_options:
|
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: 1.3.7
|
154
154
|
requirements: []
|
155
|
-
rubygems_version: 3.
|
155
|
+
rubygems_version: 3.1.6
|
156
156
|
signing_key:
|
157
157
|
specification_version: 4
|
158
158
|
summary: Official Postmark API wrapper.
|