Repository navigation
Releases: mailtea-app/mailtea-ruby
Release list
v0.7.0
- Docs: a domain claim takes an optional
purpose(email,siteor
both, defaultemail), and the domain the claim produces is created with
that purpose; every claim response carriespurpose. The parameter passes
through the existing claim call; only the doc comments change here. Needs the
API deployed with this change.
Released from mailtea-app/mailtea@1ea0e1b.
v0.6.0
- Docs: template history now records the sender. Each entry from the template
versions call carriesfrom,reply_toandsender_recorded, an update
that changes only the From or Reply-To records a version (or folds into the
open one, like any edit), and restoring a version brings its From and
Reply-To back with the design. A version withsender_recordedfalse was
recorded before this change and leaves the current From and Reply-To alone
when restored. The behaviour comes from the API and reaches every SDK
version on deploy; only the doc comments change here.
Released from mailtea-app/mailtea@ff8e7ef.
v0.5.0
- Breaking:
Posts#createwithtemplate_idnow HTML-escapes thevariables
you pass, the same as every other send. HTML passed in a{{key}}value now
arrives as visible text, and a value you escaped yourself arrives
double-escaped. Put{{{key}}}in the template where a value is meant to be
raw HTML. Variables are now filled in both the{{key}}and Visual Email
Designer{key}forms. A declared variable you do not pass stays in the
post with itsfallback_value, so the broadcast gives each recipient their
own value or that fallback, and undeclared tokens like
{{contact.first_name}}are left for the broadcast too. The post keeps the
template's published page style, is wrapped in that page, and has its
show-if blocks decided per recipient when it is sent. Before, only the
variables you passed were replaced, raw, and only in{{key}}form. It uses
the template's published version; Mailtea Studio's "Use template" starts
from the latest saved design instead. - Changed:
Templates#updateandTemplates#restore_versionno longer move a
published template back to draft. The template keeps its published status,
and automations and the API keep sending its published version until
Templates#publishis called again. The template'sfromandreply_to
are part of the published version too, so a new sender or reply-to address
reaches sends only after the next publish.Templates#unpublishis now the
only way to stop a published template sending, short of deleting it, and it
drops the stored published version so the next publish starts from the
current content. - Added:
has_unpublished_versionson every returned template hash. True only
when the template is published and its saved content (From, Reply-To and the style profile
included) differs from the published version. - Added:
is_publishedon each template version entry: true for the one entry
automations and the API are sending now.is_currentis now described as
what it is: the entry that matches the working copy (the saved design being
edited), not necessarily what is sending.is_publishedis false on every
entry of a draft, and on a template published before the field existed until
it is published again. - Changed: the
unpublishedkey on the update and restore replies is kept for
compatibility and is now alwaysfalse. Checkhas_unpublished_versions
(or the reply'smessage) instead. - Changed (API behavior): a template variable's
fallback_valuecan no longer
contain{or}. Creating a template with one, or changing a fallback
to one on update, is a 400 ("Fallbacks can't contain { or }."). A value
the template already stores is accepted unchanged, so a template saved
before the rule keeps saving. Inline chip fallbacks such as
{first_name|Mom & Pop}now render as written instead of double-escaped. - Changed (API behavior): saving an active automation is refused only when the
edit adds an error the live version does not already have. The 422
active_graph_invalidreply'sissueslists just those new problems.
Before, any error refused the save, even one the live version already had.
Starting refuses every error as before, except anunknown_step_refat a
config.*path or a triggermissing_branchthat the version the
automation last ran on already had, so pausing and starting an unchanged
automation keeps working. Issues the last live version already had come back
withpre_existing: true. - Added (API behavior): issue objects carry
field, what a rule reads (the
rule'sfield, or the path in a{"var": ...}value, e.g.
steps.welcome.opened) when the issue is about one. - Changed (API behavior): two issues are the same problem when their code and
step match, and theirfieldor, when there is none, theirpath. Moving
a rule, by removing a rule beside it or putting it in a group, no longer
makes a problem the live version already had look new. An error is
pre_existingonly if the live version had an error there, not a warning. - Changed (API behavior):
validate_onlyon an active automation answers the
way the save would. A trigger change is a 422trigger_locked_while_active,
a change that adds a problem is a 422active_graph_invalidlisting only
the new problems, and otherwise issues come back withpre_existingmarked
against the version live now. Before, it returned every issue unmarked. - Changed (API behavior): changing the trigger (its type or key) of an active
automation is now refused with 422trigger_locked_while_active. Pause it
first; draft and paused automations can still change their trigger. Before,
the change was accepted. - Added (API behavior): new validation rules. A trigger with nothing after it
is amissing_brancherror atbranches.next. A rule or{"var": ...}
value that readssteps.<key>.*for a step that isn't in the automation is
anunknown_step_referror at thatconfig.*path, or a warning when the
{"var": ...}has adefault. A rule or value that reads
event.properties.*when the automation does not start from an app event is
the new warningevent_field_without_event_trigger.
Released from mailtea-app/mailtea@acea165.
v0.4.0
- Added: test mode.
mailtea.api_keys.create(name: "CI", mode: "test")mints a
test key (prefixedmt_test_) whose sends are validated, recorded and
webhook-emitting but never delivered, so CI can run against production Mailtea
with your real code and your real webhook handler. A test key is not a
data sandbox — it reads and writes your real contacts, templates, senders and
webhooks. Only delivery is simulated. - Added:
mailtea.emails.list(mode: "test")reads test-mode mail, and every
email carriesmode. There is no mixed view: a test key reads only test
emails and a live key only live ones. - Reserved recipients on
test.mailtea.emailforce an outcome:delivered@,
bounced@,complained@,delayed@,failed@. The firsttorecipient
decides; anything else is delivered.
Released from mailtea-app/mailtea@8c362fb.
v0.3.0
- Added:
mailtea.domains.update(id, tracking_subdomain: nil)removes a
tracking subdomain. The domain's links go back to being served from the
Mailtea host. Links in mail you have already sent point at the old hostname
and stop resolving — there is no way to reinstate them. Only the query string
drops nils, so the removal travels in the body as an explicit null; leaving
the key out and passing nil are different requests. An empty string is
neither: it is refused withtracking_subdomain_invalid. - Changed: the
MXrow inrecordsnow reports what the last verify found,
instead of readingpendingon every request but the verify itself. A domain
nobody has verified readsnot_started.
Released from mailtea-app/mailtea@fed0718.
v0.2.0
- Added: the domain claims resource —
mailtea.domains.claims.create,.get,
.verifyand.cancel. When adding a domain is refused because the host is
connected to another publication, publish one TXT record to prove you control
its DNS and the domain moves to you. - Documented: domains take
region(fixed at creation),tlsand
tracking_subdomainon create, and the list filters onregionandstatus.
This SDK forwards whatever parameters you pass, so these worked already — this
release is where they are stated and covered by tests.
Released from mailtea-app/mailtea@5ac8a451.
v0.1.0
First release. A thin, zero-dependency wrapper over the
Mailtea REST API, built on
net/http and json from the standard library. Ruby 3.0+.
Added
-
Mailtea::Client— readsMAILTEA_API_KEYand the optional
MAILTEA_API_BASE_URL, or takes both explicitly. The HTTP transport is
injectable, so tests need no network and an app can route requests through its
own instrumented stack. -
Transactional email.
emails.send,batch,get,list,analytics,
update,rescheduleandcancel— plusemails.inboundfor received mail
(list,get,reply, andattachments.list/attachments.get).
emails.getadds astatusalias of the wire'slast_event. The API caps a
message at 50 recipients combined acrossto,ccandbcc. -
Audience.
contacts(create/upsert,list,get,update,
delete),segments,topics,senders,suppressions(including
export, which returns raw CSV text), andcontact_properties. -
Content.
posts(create,send,send_test,list,get,update,
delete),templates(includingrender,publish/unpublish,versions,
restore_versionandduplicate), andassetsfor the publication's image
library — raw bytes are base64-encoded for you. -
Platform.
domains(+domains.tracking),webhooks,api_keys,
automations,automation_runs,eventsandevent_definitions. -
Mailtea.verify_webhook_signature/Mailtea.sign_webhook— Standard
Webhooks verification with replay protection and a constant-time compare,
checked in the test suite against signatures produced by the platform's own
TypeScript signer. -
Mailtea::Erroron every failure, carryingstatus(0 for a client-side
fault such as an unreachable API),message,code,detailsand
request_id.
Released from mailtea-app/mailtea@a0172eda.