Title: Quillrush Newsletter Studio for Sendy
Author: Gunjan Jaswal
Published: <strong>29. Mai 2026</strong>
Last modified: 16. September 2026

---

Search plugins

![](https://ps.w.org/quillrush-newsletter-studio-for-sendy/assets/banner-772x250.
png?rev=3637239)

![](https://ps.w.org/quillrush-newsletter-studio-for-sendy/assets/icon-256x256.png?
rev=3636978)

# Quillrush Newsletter Studio for Sendy

 By [Gunjan Jaswal](https://profiles.wordpress.org/gunjanjaswal/)

[Download](https://downloads.wordpress.org/plugin/quillrush-newsletter-studio-for-sendy.1.7.0.zip)

 * [Details](https://de-ch.wordpress.org/plugins/quillrush-newsletter-studio-for-sendy/#description)
 * [Reviews](https://de-ch.wordpress.org/plugins/quillrush-newsletter-studio-for-sendy/#reviews)
 *  [Installation](https://de-ch.wordpress.org/plugins/quillrush-newsletter-studio-for-sendy/#installation)
 * [Development](https://de-ch.wordpress.org/plugins/quillrush-newsletter-studio-for-sendy/#developers)

 [Support](https://wordpress.org/support/plugin/quillrush-newsletter-studio-for-sendy/)

## Description

📧 **Quillrush Newsletter Studio for Sendy** turns your WordPress dashboard into
a full-blown newsletter creation studio for the **Sendy + Amazon SES** stack. Drag
your latest posts into a beautiful responsive HTML email, pick the Sendy lists/segments
to ship to, and send via your self-hosted Sendy installation, which forwards every
message through Amazon SES. No HTML coding. No external SaaS. No paid tier.

> ⚠️ **Requires a self-hosted Sendy install backed by Amazon SES.** This plugin 
> is the WordPress front-end — it does not replace Sendy or SES. If you don’t have
> Sendy + SES set up yet, see [sendy.co](https://sendy.co/) and [aws.amazon.com/ses](https://aws.amazon.com/ses/).

#### ✨ Headline features

 * 🎨 **Visual newsletter builder** — drag posts in, see the rendered email update
   live.
 * 📨 **Two newsletter formats per campaign** — _The Roundup_ (subscriber-facing)
   and _The Insider Brief_ (editorial pitch for media & partners).
 * 📋 **Auto-fetched Sendy lists & segments** — pulled live via the Sendy API, shown
   as checkboxes with active subscriber counts. Cached 10 minutes; one-click refresh.
 * 🧠 **Remembers your last selection** — the lists you sent to last time are pre-
   checked next time.
 * 🔍 **Infinite-scroll post search** — AJAX-loads posts in batches of 10 as you
   scroll.
 * 🖼️ **Smart hero image** — uses your uploaded banner if present, otherwise falls
   back to the first post’s featured image.
 * 📱 **Mobile-first responsive layout** — 2 columns on desktop, single column on
   mobile (< 600px), auto-height cards.
 * 📅 **Three send modes** — Save as Draft in Sendy, Send Immediately, or Schedule
   for a future date/time.
 * 🕐 **Timezone-aware scheduling** — uses your WordPress timezone; shows current
   server time + zone next to the picker.
 * ♻️ **Auto-recovery for overdue campaigns** — if WP-Cron didn’t fire on time, 
   overdue scheduled campaigns are auto-sent on next admin page-load.
 * 🛠️ **Retry on failure** — failed sends show the exact Sendy error + a one-click
   Retry Send button.
 * ⚙️ **Optional cron trigger** — after each send, optionally hit `scheduled.php?
   i=BRAND_ID` on your Sendy host so queued campaigns process without a server cron.
 * ✍️ **Custom footer block** — extra text/HTML above the footer in a highlighted
   box. Supports anchor tags + auto `nl2br`.
 * 🌐 **Social footer icons** — Instagram, LinkedIn, X (Twitter), YouTube.
 * 🗃️ **Campaign history** — every campaign stored as a `qrnss_campaign` custom-
   post-type entry with Status / Scheduled For / Error columns.
 * 🔒 **WordPress-native security** — nonces on every action, `manage_options` capability
   checks, `wp_safe_redirect()` for all redirects.

#### 📨 The two newsletter formats

🗞️ **The Roundup** — visual hero + 2-column story grid for your subscribers. Uses
the «Custom Footer Text» highlighted box.

✉️ **The Insider Brief** — personal greeting, lead paragraph, centered hero with
featured image, «What Else We’re Seeing» 2-column grid, «Why this matters» callout,«
For Media & Collaborations» CTA block, and a centered About Us block. Built for 
media pitches & partner updates. All copy editable from _Settings  The Insider Brief—
Template Texts_.

Pick the format per-campaign on the Create Newsletter page (Design Settings  Newsletter
Format). Header and dark footer (logo, social, copyright, unsubscribe) are shared
across both formats.

#### 📋 Full settings reference

🔌 **Sendy Connection Settings**

 * **Sendy Installation URL** — base URL of your Sendy install (e.g. `https://sendy.
   yourdomain.com/`).
 * **API Key** — from Sendy  Settings  Your API Key.
 * **Brand ID (Optional)** — from Sendy  Settings  Your Brand  ID. Required by some
   Sendy versions and used for auto-fetching lists.
 * **Default From Name** — pre-filled into every new campaign.
 * **Default From Email** — pre-filled into every new campaign.
 * **Auto-Trigger Cron** — checkbox. After sending, hit `<sendy-url>/scheduled.php?
   i=BRAND_ID` so queued campaigns process without a system cron.
 * **Show Article Excerpt** — checkbox. Insert a 20-word excerpt between the post
   title and the «Read More» button.

🎨 **Footer & Social Settings**

 * **Footer Logo URL** — logo shown in the dark footer band.
 * **Copyright Text** — footer copyright line. `{year}` is replaced with the current
   year.
 * **Custom Footer Text** — textarea, HTML allowed. Shown in a highlighted box above
   the footer in _The Roundup_. Newlines  `<br>` automatically.
 * **«Read More Articles» Link** — optional link below the post grid.
 * **Instagram URL** / **LinkedIn URL** / **X (Twitter) URL** / **YouTube URL** —
   social icons in footer.

✉️ **The Insider Brief — Template Texts** _(used only by The Insider Brief format)_

 * **Greeting** — e.g. `Hi [First Name],`
 * **Intro Paragraph** — lead paragraph above the hero story (HTML allowed).
 * **Hero Section Label** — small label above the hero (e.g. `Hero Story`).
 * **Grid Section Heading** — e.g. `🔍 What Else We're Seeing`
 * **«Why This Matters» Heading + Body**
 * **Collaboration Heading + Body** — e.g. `📩 For Media & Collaborations` + CTA
   bullets and contact info (HTML allowed).
 * **About Us Heading + Body** — centered About block above the footer.

#### 📅 Send modes

 * 💾 **Save as Draft in Sendy** — POSTs to `create-campaign.php` with `send_campaign
   =0`. Campaign appears in your Sendy dashboard as a draft. WP logs status: `draft`.
 * 🚀 **Send Immediately** — POSTs to `create-campaign.php` with `send_campaign=
   1`. Sendy queues + dispatches via SES. WP logs status: `sent`. If _Auto-Trigger
   Cron_ is on, also hits `scheduled.php?i=BRAND_ID`.
 * ⏰ **Schedule** — stored as a `qrnss_campaign` post with status `scheduled`. 
   WordPress registers a one-off `wp_schedule_single_event` for the chosen datetime.
   When the event fires, the plugin sends via Sendy. Datetime picker is timezone-
   aware and uses your WP timezone setting.

#### 🛟 Failure handling

Failed sends never silently disappear:

 * ❌ Red admin notice at the top of the Campaigns screen.
 * 📋 Exact Sendy error in the **Error** column.
 * 🔁 One-click **Retry Send** button (CSRF-nonced).
 * ♻️ Auto-recovery — overdue scheduled campaigns automatically send on next admin
   page-load.

#### 🗄️ Campaign history (CPT)

Every campaign is stored as a `qrnss_campaign` custom-post-type entry. Admin columns:

 * **Title** — subject line.
 * **Status** — `draft` (grey), `scheduled` (yellow), `sent` (green), `failed` (
   red).
 * **Scheduled For** — datetime if scheduled.
 * **Error** — Sendy error message if the send failed.

#### 🔌 Sendy API endpoints used

All requests go straight to **your own self-hosted Sendy installation** at the URL
you set in Settings. The plugin never talks to any third-party SaaS — Sendy itself
fans out to Amazon SES from your host.

 * `api/lists/get-lists.php` — fetch lists for the Create Newsletter screen (cached
   10 min). Sends: `api_key`, `brand_id`.
 * `api/subscribers/active-subscriber-count.php` — per-list subscriber counts. Sends:`
   api_key`, `list_id`.
 * `api/campaigns/create.php` — Save as Draft, Send Immediately, scheduled fire.
   Sends: `api_key`, `from_name`, `from_email`, `reply_to`, `title`, `subject`, `
   html_text`, `plain_text`, `list_ids`, `brand_id`, `send_campaign`.
 * `scheduled.php` (your Sendy host) — only when _Auto-Trigger Cron_ is ticked. 
   Sends: `i=BRAND_ID` query param.

#### 🔒 Requirements

 * WordPress 5.8 or higher (tested up to 7.0).
 * PHP 7.4 or higher.
 * A reasonably recent self-hosted Sendy installation.
 * Amazon SES configured inside Sendy (out of scope for this plugin).

## Screenshots

[⌊Newsletter Builder — search for posts, drag them into the layout, watch the live
preview.⌉⌊Newsletter Builder — search for posts, drag them into the layout, watch
the live preview.⌉[

Newsletter Builder — search for posts, drag them into the layout, watch the live
preview.

[⌊Settings → Sendy Connection — Installation URL, API Key, Brand ID, defaults.⌉⌊
Settings → Sendy Connection — Installation URL, API Key, Brand ID, defaults.⌉[

Settings  Sendy Connection — Installation URL, API Key, Brand ID, defaults.

[⌊Campaigns CPT — status colours at a glance (draft / scheduled / sent / failed).⌉⌊
Campaigns CPT — status colours at a glance (draft / scheduled / sent / failed).⌉[

Campaigns CPT — status colours at a glance (draft / scheduled / sent / failed).

## Installation

 1. Upload the plugin files to `/wp-content/plugins/quillrush-newsletter-studio-for-
    sendy`, or install via Plugins  Add New.
 2. Activate the plugin through the Plugins screen.
 3. Open **Quillrush Newsletter** in the admin sidebar.
 4. Fill in **Sendy Installation URL**, **API Key**, and (recommended) **Brand ID**.
    Hit **Save Settings**.
 5. Go to **Quillrush Newsletter  Create Newsletter** — your Sendy lists appear as 
    checkboxes with subscriber counts. Build away!

#### 🆙 Migrating from a predecessor install

If you previously ran an earlier release line under a different option/CPT/meta 
prefix (e.g. `sssb_*` or `pvnss_*`), the plugin auto-migrates everything on first
load:

 * All matching options  `qrnss_*` (including dynamic list-cache transients)
 * Custom-post-type rows  `qrnss_campaign`
 * Every legacy post-meta key  `_qrnss_*`
 * Any pending legacy `*_send_scheduled_campaign` cron event  `qrnss_send_scheduled_campaign`
 * Rewrite rules flushed

Each legacy prefix is guarded by a one-shot `qrnss_migrated_from_<prefix>` flag —
runs at most once per install. Existing campaigns, drafts, scheduled sends, list-
cache, and settings come across without manual intervention.

Steps:

 1. Deactivate the previous plugin in WP Admin.
 2. Delete it (your data lives in `wp_options` / `wp_posts` / `wp_postmeta`, safe).
 3. Install + Activate Quillrush Newsletter Studio for Sendy.
 4. Migration fires automatically on first load. Existing campaigns appear under the
    new top-level menu.

## FAQ

### Why didn’t my scheduled campaign send on time?

WP-Cron only runs on page-loads. The plugin auto-recovers overdue campaigns on next
admin page-load (you’ll see a green success notice). For deterministic timing on
production sites, replace WP-Cron with a system cron:

    ```
    define('DISABLE_WP_CRON', true); in `wp-config.php`, then add a server cron:

    * * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
    ```

### My campaign is stuck on «Preparing to send…» in Sendy.

Sendy’s own cron isn’t running. Either:

 * Tick **Auto-Trigger Cron** in plugin settings, OR
 * Add a server cron on the Sendy host:
 * */5 * * * * php /path/to/sendy/scheduled.php > /dev/null 2>&1

### My lists don’t appear in Create Newsletter.

Check **Sendy Installation URL**, **API Key**, and **Brand ID** in Settings. The
plugin fetches lists via `api/lists/get-lists.php` which requires the Brand ID on
most Sendy versions. Use the **Refresh lists from Sendy** link on the Create Newsletter
page to bust the 10-minute cache.

### A campaign failed. How do I retry?

Open **Quillrush Newsletter  Campaigns** in the admin sidebar. Failed campaigns 
show the exact Sendy error and a **Retry Send** button. The retry clears the previous
error before re-sending.

### Can I customise the editorial copy without touching code?

Yes. Every line of «The Insider Brief» (greeting, intro, hero label, grid heading,«
Why this matters», collaboration block, About Us) lives under **Settings  The Insider
Brief — Template Texts**. HTML allowed where appropriate.

### Does it work with WordPress 7.0 / PHP 7.4+?

Yes. Tested up to WordPress 7.0. PHP 7.4 minimum.

### Where does the plugin send data?

Only to **your own self-hosted Sendy installation** at the URL you set in Settings.
No third-party SaaS. Sendy itself handles the SES handoff from your host.

### I sent to my whole list but only some subscribers received it.

Sendy locks in the recipient list the moment you hit Send, and it only counts subscribers
who are confirmed and haven’t bounced or unsubscribed, deduplicated by email. So
if an import was still running, or some addresses weren’t confirmed yet, they get
left out of that campaign for good, even if they show up in the list later. Before
a big send, make sure the import has fully finished and the subscribers are marked
confirmed in Sendy. To reach people who were added after a campaign went out, send
again to just those new subscribers using a separate list or a segment.

### My large campaign stopped before reaching everyone.

That’s almost always the Amazon SES sending limit, not the plugin. SES caps how 
many emails you can send in any rolling 24-hour window (your Max24HourSend) and 
how many per second. Send a list bigger than that daily cap and SES refuses the 
rest until the window clears. Check your quota under SES Console, Account dashboard,
and request an increase there if your lists are large. For a list in the hundreds
of thousands, raise the daily quota first, then send. Sendy’s cron keeps draining
the queue as capacity frees up.

### Any advice before sending to a big imported list?

Ramp up instead of sending everything at once, especially with a freshly imported
list you’ve never mailed. Amazon SES watches your bounce and complaint rates and
will pause your account if bounces cross roughly 5% or complaints cross 0.1%. Send
a smaller batch first, check the SES reputation dashboard, then release the rest
over a day or two. Clear out obviously dead addresses beforehand.

### How do I see my Amazon SES sending limits in the plugin?

Upload the file at sendy-companion/ses-quota.php (included with the plugin) into
your Sendy install’s /api/ folder, so it’s reachable at https://your-sendy-url/api/
ses-quota.php. The Create Newsletter screen then shows a panel with your daily quota,
how much you’ve sent in the last 24 hours, what’s left today, and your send rate,
pulled live from your Amazon SES account. The file is read-only and protected by
your Sendy API key. Without it, the plugin works exactly as before, just without
the panel. Note: the daily quota AWS actually enforces can be lower than the amount
you were approved for; SES raises it over time as your sending reputation builds.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Quillrush Newsletter Studio for Sendy” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ Gunjan Jaswal ](https://profiles.wordpress.org/gunjanjaswal/)

[Translate “Quillrush Newsletter Studio for Sendy” into your language.](https://translate.wordpress.org/projects/wp-plugins/quillrush-newsletter-studio-for-sendy)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/quillrush-newsletter-studio-for-sendy/),
check out the [SVN repository](https://plugins.svn.wordpress.org/quillrush-newsletter-studio-for-sendy/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/quillrush-newsletter-studio-for-sendy/)
by [RSS](https://plugins.trac.wordpress.org/log/quillrush-newsletter-studio-for-sendy/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.7.0

 * New: an Amazon SES sending-limits panel on the Create Newsletter screen. See 
   your daily quota, how much you’ve sent in the last 24 hours, how much is left
   today, and your send rate, in plain language, without opening the AWS console.
   The large-send confirmation now uses the real remaining quota, so it warns you
   when a send won’t fit in what’s left of your SES 24-hour window.
 * The numbers come live from your own Amazon SES account through a small read-only
   companion file you drop into your Sendy install’s /api/ folder (included in this
   release under sendy-companion/). It’s protected by your Sendy API key. If you
   don’t install it, the panel simply doesn’t appear and nothing else changes.

#### 1.6.6

 * Added a large-send confirmation. When the lists you’ve selected add up to a big
   audience (20,000 or more by default), the newsletter screen now asks you to confirm
   before a real send, with a reminder to check your Amazon SES daily sending quota
   and make sure the list is clean. The `qrnss_large_send_threshold` filter changes
   the number or turns it off (set it to 0). This is a heads-up only; delivery pacing
   is unchanged, since Sendy and Amazon SES already throttle the actual sending.

#### 1.6.5

 * Fixed: a failed «Send» no longer silently vanishes. If Sendy rejects the send,
   the campaign is kept and listed under Campaigns as «Failed» with the exact error
   and a one-click Retry Send button, instead of being deleted with only a fleeting
   notice. Before this, a failed send left no record anywhere, so there was nothing
   to see or retry.
 * More tolerant reading of Sendy’s response, so a successful send isn’t misreported
   as an error over a trailing newline or a small wording change between Sendy versions.
 * Clearer message when the security token has expired because the newsletter screen
   was left open too long: it now tells you to reload and try again, instead of 
   showing «Connection error».

#### 1.6.4

 * Documentation: added FAQ guidance for people sending to large lists. Why a campaign’s
   recipient count can come out lower than the list size (Sendy counts confirmed,
   de-duplicated, non-bounced subscribers and locks the count in the moment you 
   send), why a big send can stop partway through (the Amazon SES daily sending 
   quota), and how to warm up a freshly imported list without tripping SES bounce
   or complaint limits. No code changes.

#### 1.6.3

 * Dropped the jQuery UI datepicker. The scheduling field has been a normal date
   and time input for a while now, but the plugin was still loading the datepicker
   library and carrying the old code that drove it, none of which ever ran. One 
   less script on the newsletter screen.

#### 1.6.2

 * Security: every `$_POST['campaign']` field is now sanitized individually before
   use (subject, from_name, from_email, plain_text, list_id, send_type, schedule_date).
   The `html_text` field is run through a dedicated email-safe `wp_kses` allowlist(
   tables, inline styles, images, anchors, headings, lists — but no `<script>`, `
   <iframe>`, `<form>`, or `on*` event attributes) before it is stored to `post_content`
   or sent to the Sendy API. New filter `qrnss_email_kses_allowed_html` lets third
   parties extend the allowlist.
 * Required-field validation: subject, from_email, and html_text must be non-empty;
   send_type must be one of `draft` / `send` / `schedule` or it falls back to `draft`.
 * Removed remote-loaded social icons. The footer in the rendered newsletter and
   the admin preview no longer fetch Instagram/LinkedIn/X/YouTube logos from flaticon.
   com / wikimedia.org / freepik.com — they now use self-contained styled letter-
   buttons (`IG`, `in`, `X`, `YT`) so the plugin has zero remote-image dependencies
   and the newsletter renders identically offline / in restricted email clients.

#### 1.6.1

 * Fix: removed the plugin’s own injected «View details» row-meta link to prevent
   a duplicate entry, since WordPress auto-injects «View details» for wp.org-hosted
   plugins. Row meta is now `View details | Plugin Support | Contact Developer`.

#### 1.6.0

 * **WordPress 7.0 tested** and audited; PHP minimum bumped to 7.4.
 * Added `Requires at least`, `Tested up to`, and `Requires PHP` headers to the 
   main plugin file.
 * Added one-time auto-migration on first load (priority 1) for predecessor installs:
   sweeps every legacy option, custom-post-type row, post-meta key, and pending 
   scheduled cron event to the current `qrnss_*` namespace. Per-prefix guard flag
   so each migration path runs at most once.
 * Added **Support on Ko-fi** action link next to Deactivate on the Plugins screen.
 * Added **Plugin Support** (wordpress.org/support/plugin/quillrush-newsletter-studio-
   for-sendy) and **Contact Developer** (mailto:hello@gunjanjaswal.me) row-meta 
   entries.
 * Added «Support the developer» card on the Settings screen with branded Ko-fi 
   button, Plugin Support Forum link, and Contact Developer mailto.
 * Donate link set to Ko-fi (https://ko-fi.com/gunjanjaswal).

#### 1.5.2

 * Fix: Infinite scroll in the «Add Posts» panel now actually triggers. The scroll
   handler was using event delegation which doesn’t work for scroll events; it’s
   now bound directly to the results container.

#### 1.5.1

 * Improvement: «About Us» body in The Insider Brief footer block is now centered(
   heading was already centered).
 * Cleanup: Removed all «Buy Me A Coffee» links and the Support card from the settings
   page, newsletter builder, plugin row meta, and readme files.

#### 1.5.0

 * Feature: «Add Posts» panel now supports infinite scroll. Older posts load automatically
   as you scroll the results list (10 at a time).
 * Internal: `qrnss_search_posts` AJAX endpoint now accepts a `page` parameter and
   returns `{ posts, page, has_more }`.

#### 1.4.x

 * Feature: Auto-fetched Sendy lists with active subscriber counts. Cached 10 minutes;
   one-click refresh.
 * Feature: Plugin remembers the lists used in your last send and pre-checks them
   next time.
 * Feature: Editorial format («The Insider Brief») added alongside The Roundup. 
   All copy editable from settings.

#### 1.3.x

 * Feature: Scheduled sending with timezone-aware datetime picker.
 * Feature: Failed-campaign retry and auto-recovery for overdue campaigns.
 * Fix: Schedule datetime picker with proper z-index for calendar visibility.
 * Fix: Reply-to email correctly passed for all campaign types.
 * Fix: Resolved «cURL error 28: SSL connection timeout».
 * Security: All inputs properly sanitized and validated.

#### 1.0.0

 * Initial release.

## Meta

 *  Version **1.7.0**
 *  Last updated **4 Wochen ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.8 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/quillrush-newsletter-studio-for-sendy/)
 * Tags
 * [Amazon SES](https://de-ch.wordpress.org/plugins/tags/amazon-ses/)[Email Marketing](https://de-ch.wordpress.org/plugins/tags/email-marketing/)
   [newsletter](https://de-ch.wordpress.org/plugins/tags/newsletter/)[sendy](https://de-ch.wordpress.org/plugins/tags/sendy/)
 *  [Advanced View](https://de-ch.wordpress.org/plugins/quillrush-newsletter-studio-for-sendy/advanced/)

## Ratings

Es wurden noch keine Rezensionen eingereicht.

[Your review](https://wordpress.org/support/plugin/quillrush-newsletter-studio-for-sendy/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/quillrush-newsletter-studio-for-sendy/reviews/)

## Contributors

 *   [ Gunjan Jaswal ](https://profiles.wordpress.org/gunjanjaswal/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/quillrush-newsletter-studio-for-sendy/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://ko-fi.com/gunjanjaswal)