Repository navigation
v1.5.2 — Inbound email, SNS SignatureVersion 2 and workflow fixes
Fixed
-
Inbound email never created a ticket. The inbound controller passed the parsed
Inbound_MessagetoInboundEmailService::process(), which only accepted an array. TheTypeErrorwas caught, so every Mailgun, Postmark and SES webhook got a 500 and nothing was created. The service now takesInbound_Message.- Hooks:
escalated_inbound_email_processedandescalated_inbound_email_failedpass theInbound_Messageinstead of an array. - Response: a handled email answers
{"status": "ok", "ticket_id": …}.
- Hooks:
-
Most replies could not find their ticket. Replies now follow the documented resolution chain, first match wins:
- a
<ticket-{id}@domain>Message-ID inIn-Reply-To - the same in
References - a signed
reply+{id}.{hmac8}@domainrecipient - a
[ESC-00001]subject reference - an earlier inbound email's Message-ID
Before, only the last two were checked, and the subject reference came first.
- a
-
Inbound Message-IDs were logged empty.
sanitize_text_field()removes<id@host>as if it were an HTML tag. Replies could not be matched to an earlier inbound email, a redelivered email opened a second ticket, and later emails could not be logged at all, because the UNIQUEmessage_idindex already held an empty value. Message-IDs are now stored as sent, less any whitespace, and a redelivered email is recognised before it is logged. -
An SES subscription confirmation opened a ticket. It is now confirmed and answered without being processed as email.
-
Inbound attachments were stored as
unnamed, and Mailgun attachments were dropped. The service readfilename,contentTypeandcontent, but the adapters sendname,typeand, for Mailgun, an uploaded file. Every adapter now hands over the attachment bytes under the same keys. -
SES inbound refused SNS topics that sign with SignatureVersion 2. Every SNS signature was checked with SHA1, so a topic set to SignatureVersion 2 (SHA256) failed verification and its email got a 403. The algorithm now follows the message's
SignatureVersion: SHA1 for1, SHA256 for2. A missing or unknown version is rejected before the signing certificate is fetched. -
The workflow
delayaction waited seconds, not minutes. The workflow admin contract defines thedelayvalue as minutes, and the admin builder labels the field "Wait (minutes)", but the executor added it to the clock as seconds. A "Wait 15 minutes" step resumed after 15 seconds. The value is now read as minutes.- Existing workflows: a
delayvalue that was entered as seconds now waits 60 times as long. - Queued jobs: runs already paused keep the resume time they were given.
- Existing workflows: a
-
Removing a tag ran
ticket.taggedworkflows.WorkflowListenerran theticket.taggedtrigger on bothescalated_tag_addedandescalated_tag_removed. It now runs only when a tag is added.