Disable UniSender message tracking explicitly
Some checks are pending
Quality / full-local-gates (push) Waiting to run
Some checks are pending
Quality / full-local-gates (push) Waiting to run
This commit is contained in:
parent
e72aaf9b73
commit
8baa9abc13
|
|
@ -387,6 +387,9 @@ idempotence key, redacts rejected recipient addresses from returned errors, and
|
||||||
uses only HTTPS. The provider documents the endpoint, `X-API-KEY` header,
|
uses only HTTPS. The provider documents the endpoint, `X-API-KEY` header,
|
||||||
response shape, and one-minute/64-character idempotence-key behavior in its
|
response shape, and one-minute/64-character idempotence-key behavior in its
|
||||||
[Web API reference](https://godocs.unisender.ru/web-api-ref).
|
[Web API reference](https://godocs.unisender.ru/web-api-ref).
|
||||||
|
Every request explicitly sets `track_links` and `track_read` to `0`; UniSender
|
||||||
|
Go otherwise enables both by default. The provider account must be allowed to
|
||||||
|
honour those values, so verify a delivered message's raw HTML before launch.
|
||||||
|
|
||||||
## Isolated restore drill
|
## Isolated restore drill
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1114,37 +1114,46 @@ availability, or target-server capacity.
|
||||||
filtering occurs.
|
filtering occurs.
|
||||||
- `WhoNeedHelp.Email.UnisenderGoAdapter` now maps the application's existing
|
- `WhoNeedHelp.Email.UnisenderGoAdapter` now maps the application's existing
|
||||||
Swoosh messages to the provider's HTTPS `email/send.json` contract. Six
|
Swoosh messages to the provider's HTTPS `email/send.json` contract. Six
|
||||||
focused tests passed for the exact request shape and API-key header, success,
|
focused tests passed for the exact request shape (including explicit
|
||||||
redacted recipient rejection, structured API errors, invalid responses, and
|
`track_read=0` and `track_links=0`) and API-key header, success, redacted
|
||||||
rejection of unsupported or provider-invalid messages before network I/O.
|
recipient rejection, structured API errors, invalid responses, and rejection
|
||||||
|
of unsupported or provider-invalid messages before network I/O.
|
||||||
Runtime configuration and production
|
Runtime configuration and production
|
||||||
environment validation can select either `smtp` or `unisender_go` without
|
environment validation can select either `smtp` or `unisender_go` without
|
||||||
requiring SMTP settings in API mode.
|
requiring SMTP settings in API mode.
|
||||||
- UniSender Go's account settings were saved with read/open tracking and link
|
- Authoritative DNS and the provider UI both showed the sending domain as
|
||||||
tracking disabled, then reloaded and observed still disabled. The provider's
|
verified with DKIM active, while the delegated link domain showed configured.
|
||||||
unsubscribe-link setting remains enabled and locked; disabling it requires
|
A second real Web API message was accepted for one recipient with no rejected
|
||||||
provider approval and has not been claimed.
|
recipients and reached Gmail's Inbox after one second. Gmail's original
|
||||||
- A real email has not yet been submitted through the new adapter. The sending
|
message view reported SPF PASS, DKIM PASS with `d=whoneedhelp.com` and
|
||||||
domain's UniSender Go verification/DKIM records were issued but are not yet
|
selector `gokey`, and DMARC PASS.
|
||||||
present in authoritative DNS, so end-to-end delivery remains unproven.
|
- The delivered MIME still contained the provider's one-pixel
|
||||||
|
`go2_read_tracker` even though the request explicitly supplied
|
||||||
|
`track_read=0` and `track_links=0`. UniSender Go documents that honoring those
|
||||||
|
zero values, and using `skip_unsubscribe=1`, requires provider approval. A
|
||||||
|
support request covering all three permissions was sent to the official
|
||||||
|
support address from the account mailbox. Privacy-disable behavior and
|
||||||
|
unsubscribe removal remain unverified until the provider enables them and a
|
||||||
|
new delivered MIME is inspected.
|
||||||
|
|
||||||
## Known work before a public production launch
|
## Known work before a public production launch
|
||||||
|
|
||||||
- Replace the temporary staging origin with the production-owned domain and
|
- Replace the temporary staging origin with the production-owned domain and
|
||||||
production infrastructure. The temporary origin is available only while the
|
production infrastructure. The temporary origin is available only while the
|
||||||
workstation, Compose stack, VPN path, gateway, and their networks are up.
|
workstation, Compose stack, VPN path, gateway, and their networks are up.
|
||||||
- Create a production Android signing identity, publish
|
- Confirm the final Android application ID before creating its Play Console
|
||||||
`/.well-known/assetlinks.json` for the final application ID/fingerprint if
|
listing, publish `/.well-known/assetlinks.json` for that ID and the final
|
||||||
verified App Links are wanted, and complete store policy/release work.
|
signing fingerprint if verified App Links are wanted, and complete store
|
||||||
|
policy/release work. A dedicated upload key and signed APK/AAB have been
|
||||||
|
created and verified locally, but no Play application has been registered.
|
||||||
- Operate PostgreSQL/PostGIS with off-site backups, recovery testing, monitoring,
|
- Operate PostgreSQL/PostGIS with off-site backups, recovery testing, monitoring,
|
||||||
and the availability model selected for real usage.
|
and the availability model selected for real usage.
|
||||||
- Publish and verify the issued UniSender Go SPF, DKIM, domain-validation,
|
- After provider approval, verify that delivered MIME contains neither open nor
|
||||||
DMARC, and link-domain DNS records, then exercise registration and magic-link
|
link tracking and omits the unsubscribe block, then exercise registration and
|
||||||
delivery through the selected HTTPS provider to a real mailbox.
|
magic-link delivery through the deployed application to a real mailbox.
|
||||||
- Create a Google OAuth Web client for the final owned HTTPS origin, configure
|
- Deploy the already configured production and staging Google OAuth clients,
|
||||||
its exact `/auth/google/callback` redirect, and exercise registration,
|
then exercise registration, sign-in, and settings linking against Google on
|
||||||
sign-in, and settings linking against Google if Google authentication is to
|
their exact HTTPS callback origins.
|
||||||
be enabled. The feature remains disabled when both credentials are empty.
|
|
||||||
- Configure and verify a real mobile push provider and device-token lifecycle
|
- Configure and verify a real mobile push provider and device-token lifecycle
|
||||||
if native push is required. The provider-neutral HTTP boundary and product
|
if native push is required. The provider-neutral HTTP boundary and product
|
||||||
jobs are tested; FCM/APNs device delivery is not.
|
jobs are tested; FCM/APNs device delivery is not.
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,8 @@ defmodule WhoNeedHelp.Email.UnisenderGoAdapter do
|
||||||
"from_email" => elem(email.from, 1),
|
"from_email" => elem(email.from, 1),
|
||||||
"from_name" => elem(email.from, 0),
|
"from_name" => elem(email.from, 0),
|
||||||
"body" => message_body(email),
|
"body" => message_body(email),
|
||||||
|
"track_links" => 0,
|
||||||
|
"track_read" => 0,
|
||||||
"idempotence_key" => idempotence_key(email)
|
"idempotence_key" => idempotence_key(email)
|
||||||
}
|
}
|
||||||
|> maybe_put_reply_to(email.reply_to)
|
|> maybe_put_reply_to(email.reply_to)
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,9 @@ defmodule WhoNeedHelp.Email.UnisenderGoAdapterTest do
|
||||||
"recipients" => [%{"email" => "helper@example.com"}],
|
"recipients" => [%{"email" => "helper@example.com"}],
|
||||||
"reply_to" => "support@whoneedhelp.com",
|
"reply_to" => "support@whoneedhelp.com",
|
||||||
"reply_to_name" => "Support",
|
"reply_to_name" => "Support",
|
||||||
"subject" => "Confirmation instructions"
|
"subject" => "Confirmation instructions",
|
||||||
|
"track_links" => 0,
|
||||||
|
"track_read" => 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user