EP Newsletter SendGrid
EP Newsletter SendGrid is a delivery driver for EP Newsletter. When installed and selected, campaigns send through SendGrid instead of your general SMTP. Better for high-volume campaigns, with automatic bounce and complaint handling through SendGrid’s webhooks.
Published by ElmsPark Studio.
Why use SendGrid
Section titled “Why use SendGrid”General SMTP providers rate-limit per-connection (often 14 per second or 100 per minute). For a campaign to 50,000 subscribers, that’s at least 8 hours of SMTP activity. Even well-configured SMTP providers start flagging reputation after a few thousand emails per day.
SendGrid is designed for high-volume campaigns:
- Higher rate limits — hundreds of emails per second on paid plans.
- Built-in bounce and complaint handling — no DIY webhook infrastructure.
- Dedicated IPs available for large senders.
- Reputation monitoring in your SendGrid dashboard.
If you send fewer than 1,000 emails a month and your SMTP provider is happy, you don’t need this. If you’re sending tens of thousands per campaign, this is the right tool.
Requirements
Section titled “Requirements”- PageMotor 0.8.2b or later
- EP Newsletter (required)
- EP Suite base class
- A SendGrid account with an API key
Installation
Section titled “Installation”- Install EP Newsletter first.
ep-newsletter-sendgrid.zipcomes with an EP Suite licence — ElmsPark supplies it directly (see EP Suite plugins); after install it updates through your site’s Updates screen.- Upload via Plugins → Manage Plugins. Activate.
- Open Plugin Settings → EP Newsletter → Email delivery.
- Select SendGrid as the driver.
Setting up SendGrid
Section titled “Setting up SendGrid”Step 1 — Get an API key
Section titled “Step 1 — Get an API key”- Log in to your SendGrid account.
- Go to Settings → API Keys → Create API Key.
- Name it (e.g. “PageMotor newsletter”).
- Permissions: Full Access is easiest; Restricted with Mail Send and Tracking scopes is more secure.
- Copy the key (shown once; store in a password manager).
Step 2 — Verify your sender
Section titled “Step 2 — Verify your sender”SendGrid requires sender verification:
- Single Sender Verification (quick) — verify one email address you’ll send from.
- Domain Authentication (recommended) — add DNS records (DKIM, SPF) so emails come from
@yoursite.com.
Follow SendGrid’s setup wizard under Settings → Sender Authentication.
Step 3 — Configure the plugin
Section titled “Step 3 — Configure the plugin”Open Plugin Settings → EP Newsletter SendGrid.
- API key. Paste from step 1.
- Default from-name and from-email. Must match your verified sender.
- Categories. Optional SendGrid tags for campaign tracking (e.g. “weekly-digest”, “product-launch”).
Step 4 — Test
Section titled “Step 4 — Test”Use the Test connection button. If green, you’re ready.
Step 5 — Set up the webhook
Section titled “Step 5 — Set up the webhook”SendGrid pushes bounce and complaint events to your site via webhook.
- In SendGrid, go to Settings → Mail Settings → Event Webhook.
- URL: copy from the EP Newsletter SendGrid settings page.
- Select events: Bounced, Dropped, Spam Report, Unsubscribe at minimum.
- Save.
- Click Test your integration from SendGrid to verify.
From this point on, SendGrid events auto-update your subscriber list.
How campaigns send
Section titled “How campaigns send”- You send a campaign from EP Newsletter.
- EP Newsletter batches the recipients.
- For each batch, EP Newsletter SendGrid calls SendGrid’s Mail Send API with the personalised payload.
- SendGrid delivers. Events (delivered, bounced, opened, clicked) are tracked on the SendGrid side.
- Bounce and spam-report events fire the webhook. EP Newsletter marks those addresses as bad automatically.
Bounce handling
Section titled “Bounce handling”Two types:
- Soft bounce (mailbox full, temporary issue). EP Newsletter retries in a subsequent campaign. After 3 soft bounces, treated as a hard bounce.
- Hard bounce (address doesn’t exist). Address is immediately marked as bad and excluded from all future campaigns.
Complaints (spam reports) immediately disable the subscriber’s marketing consent.
Troubleshooting
Section titled “Troubleshooting”“Test connection fails”
Section titled ““Test connection fails””API key is wrong, expired, or has insufficient permissions. Regenerate in SendGrid and paste again. Check the API key has at least Mail Send permission.
“Campaign sends but emails don’t arrive”
Section titled ““Campaign sends but emails don’t arrive””Check SendGrid’s own activity log at Activity → Activity Feed. SendGrid knows exactly why an email was dropped. Common reasons:
- Sender not verified.
- Recipient on your suppression list (previously bounced).
- Content triggering spam filters.
“Bounces aren’t being flagged”
Section titled ““Bounces aren’t being flagged””The event webhook isn’t configured or isn’t reaching your site. In SendGrid, go to the webhook settings and check recent activity — failed deliveries show status codes. Fix URL, firewall, or HTTPS cert issues.
“I’m being charged more than expected”
Section titled ““I’m being charged more than expected””SendGrid charges by email sent. Check your Stats page to see actual volume. Verify you’re on the plan matching your volume.
“I want to switch back to regular SMTP”
Section titled ““I want to switch back to regular SMTP””In EP Newsletter settings, change Delivery driver from SendGrid to EP Email. Campaigns from that point on route through SMTP. Past campaign history stays intact.
Feedback and corrections
Section titled “Feedback and corrections”For a quick question about this plugin, EP Support inside your admin is the fastest option. The chat widget sits on every EP plugin settings page and knows which one you’re on, with starter questions and links preloaded for that exact screen.
For anything bigger — a bug report, a feature request, or a “how do I…” that needs a real reply — open a ticket at help.elmspark.com. A real person, helped by AI, writes the reply. Usually within a few hours. Tickets don’t disappear into the void.
Changelog
Section titled “Changelog”1.0.19
Section titled “1.0.19”- Settings language menu. The language menu in this plugin’s settings now lists only the languages it is actually translated into, plus English, so you can no longer pick a language that changes nothing.
- Danish. Adds a Danish translation.
1.0.18
Section titled “1.0.18”- Saved keys and passwords that stopped working are recovered. On PageMotor 0.11.3 or later, a key or password saved in this plugin’s settings before this plugin protected its keys itself could be kept in a scrambled form the plugin could not read, so the connection it was for failed. The plugin now unscrambles it once and keeps it protected as usual.
- If a saved key cannot be recovered, it is no longer stored in its unreadable form. The error log says which one to enter again in the plugin settings.
- Keys you save from now on are unaffected.
1.0.17
Section titled “1.0.17”- Fixes stored keys and passwords reading as empty after a PageMotor 0.11.3 or 0.11.4 update. After the core update, every secret this plugin had encrypted at rest came back blank, so anything that needed it failed with an authentication error until the value was typed in again. Nothing was deleted: the encrypted value was still in the settings row, but PageMotor 0.11.3 moved the site secret that opens it, and this plugin was still looking in the old place. It now finds the secret in both places, so an existing value opens again without re-entry, and a value that was re-entered in the meantime keeps working and is moved back under the site secret.
- If you updated PageMotor and then re-entered a key or password, there is nothing to do. If you updated and have not re-entered it, this release restores it on the next page load.
1.0.16
Section titled “1.0.16”- Your SendGrid API key is now stored encrypted. Until this release it sat in plain text in the plugin’s settings, where anyone holding an API or MCP connection to your site with permission to configure plugins could read it straight back out. Your site’s visitors were never able to see it.
- Existing sites convert themselves the next time the plugin loads, once. There is nothing to re-enter and no key to replace.
- Reading your settings over the API now returns a placeholder rather than the value, and writing that placeholder back leaves the stored secret untouched. Clearing it by submitting an empty value still works as before.
- On hosting without encryption support the previous behaviour is kept and the reason is written to the log, because quietly discarding a working key would be worse than the exposure this closes.