Skip to content

Add transactional gift delivery emails - #29850

Open
kevinansfield wants to merge 1 commit into
agent/ber-3851-delivery-persistencefrom
agent/ber-3851-delivery-email
Open

Add transactional gift delivery emails#29850
kevinansfield wants to merge 1 commit into
agent/ber-3851-delivery-persistencefrom
agent/ber-3851-delivery-email

Conversation

@kevinansfield

Copy link
Copy Markdown
Member

Summary

  • add localized recipient delivery email templates and cadence wording
  • add the buyer confirmation variant for email gifts
  • send gift delivery as transactional mail with open and click tracking disabled
  • capture the provider message ID when the transport supplies one
  • keep the transport unused until the later lifecycle and checkout layers

Stack

3 of 6. Stacked on #29849; the delivery lifecycle and scheduler PR is next.

Issue: https://linear.app/ghost/issue/BER-3851/establish-immediate-email-delivery-for-gift-subscriptions

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 39a2a104-96ec-4f52-a304-4e6078b5c7ff

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌐 Automated translation review

Verdict: ⏭️ Skipped — PR is too large for automated review

Reviewed 0 translations across 61 files.

This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.


Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.

@kevinansfield
kevinansfield marked this pull request as ready for review August 10, 2026 15:10
@kevinansfield
kevinansfield force-pushed the agent/ber-3851-delivery-email branch from 812591e to bd6b9e6 Compare August 10, 2026 15:12

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌐 Automated translation review

Verdict: ⏭️ Skipped — PR is too large for automated review

Reviewed 0 translations across 61 files.

This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.


Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 812591e832

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +251 to +253
const subject = buyerName
? this.t('{buyerName} sent you a gift', {buyerName})
: this.t('You\'ve received a gift');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve literal characters in delivery email text

When the buyer, recipient, tier, or site name contains characters such as &, ', or <, the Ghost i18n namespace HTML-escapes interpolated values by default, so this subject becomes e.g. Sam &amp; Alex sent you a gift; the new plain-text renderer likewise omits interpolation: {escapeValue: false} from all dynamic t() calls. The existing reminder and purchase-confirmation text renderers explicitly disable escaping, so apply the same option to the delivery subject and plain-text translations.

Useful? React with 👍 / 👎.

@nx-cloud

nx-cloud Bot commented Aug 10, 2026

Copy link
Copy Markdown

🤖 Nx Cloud AI Fix

Ensure the fix-ci command is configured to always run in your CI pipeline to get automatic fixes in future runs. For more information, please see https://nx.dev/ci/features/self-healing-ci


View your CI Pipeline Execution ↗ for commit a020f7a

Command Status Duration Result
nx run ghost:test:ci:integration ✅ Succeeded 2m 58s View ↗
nx run @tryghost/admin:test:acceptance ✅ Succeeded 6m 39s View ↗
nx run ghost:test:integration ✅ Succeeded 3m 1s View ↗
nx run-many -t test:unit -p ghost,@tryghost/com... ✅ Succeeded 28s View ↗
nx run ghost:test:legacy ✅ Succeeded 3m View ↗
nx run ghost-monorepo:lint:boundaries ✅ Succeeded 20s View ↗
nx run ghost:test:e2e ✅ Succeeded 2m 35s View ↗
nx run-many -t lint -p ghost,@tryghost/i18n,@tr... ✅ Succeeded 1m 43s View ↗
Additional runs (4) ✅ Succeeded ... View ↗

💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗


☁️ Nx Cloud last updated this comment at 2026-08-11 16:55:54 UTC

@codecov

codecov Bot commented Aug 10, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 35.02304% with 141 lines in your changes missing coverage. Please review.
✅ Project coverage is 75.32%. Comparing base (dcb0dbd) to head (a020f7a).

Files with missing lines Patch % Lines
...e/core/server/services/gifts/gift-email-service.ts 29.91% 82 Missing ⚠️
...er/services/gifts/email-templates/gift-delivery.ts 47.16% 28 Missing ⚠️
.../core/server/services/gifts/gift-email-renderer.ts 35.29% 11 Missing ⚠️
...ost/core/core/server/services/mail/ghost-mailer.js 38.88% 11 Missing ⚠️
...ifts/email-templates/gift-purchase-confirmation.ts 25.00% 9 Missing ⚠️
Additional details and impacted files
@@                           Coverage Diff                           @@
##           agent/ber-3851-delivery-persistence   #29850      +/-   ##
=======================================================================
- Coverage                                75.38%   75.32%   -0.07%     
=======================================================================
  Files                                     1610     1611       +1     
  Lines                                   140938   141142     +204     
  Branches                                 17455    17464       +9     
=======================================================================
+ Hits                                    106247   106311      +64     
- Misses                                   33613    33753     +140     
  Partials                                  1078     1078              
Flag Coverage Δ
e2e-tests 77.44% <35.02%> (-0.08%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@kevinansfield
kevinansfield force-pushed the agent/ber-3851-delivery-email branch from bd6b9e6 to 16d56cd Compare August 10, 2026 17:30

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌐 Automated translation review

Verdict: ⏭️ Skipped — PR is too large for automated review

Reviewed 0 translations across 61 files.

This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.


Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.

@kevinansfield
kevinansfield force-pushed the agent/ber-3851-delivery-email branch from 16d56cd to 89ea0ba Compare August 11, 2026 08:43

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌐 Automated translation review

Verdict: ⏭️ Skipped — PR is too large for automated review

Reviewed 0 translations across 61 files.

This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.


Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.

@kevinansfield
kevinansfield force-pushed the agent/ber-3851-delivery-email branch from 89ea0ba to 539e35f Compare August 11, 2026 12:04

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌐 Automated translation review

Verdict: ⏭️ Skipped — PR is too large for automated review

Reviewed 0 translations across 61 files.

This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.


Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.

@kevinansfield
kevinansfield force-pushed the agent/ber-3851-delivery-email branch from 539e35f to 00e1023 Compare August 11, 2026 12:09

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌐 Automated translation review

Verdict: ⏭️ Skipped — PR is too large for automated review

Reviewed 0 translations across 61 files.

This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.


Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.

ref https://linear.app/ghost/issue/BER-3851/establish-immediate-email-delivery-for-gift-subscriptions
Delivery needs a reusable, tracking-free transport boundary and localized recipient content before any scheduler or checkout path can call it.
@kevinansfield
kevinansfield force-pushed the agent/ber-3851-delivery-email branch from 00e1023 to a020f7a Compare August 11, 2026 16:44

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌐 Automated translation review

Verdict: ⏭️ Skipped — PR is too large for automated review

Reviewed 0 translations across 61 files.

This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.


Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant