
My Newsletter is a lightweight WordPress newsletter plugin focused on a practical use case many site owners need immediately:
This plugin is intentionally simple and WordPress-native:
wp_mail() (https://developer.wordpress.org/reference/functions/wp_mail/).wp_handle_upload() (https://developer.wordpress.org/reference/functions/wp_handle_upload/).My Newsletter lets you import and manage your own subscriber list:
Important: You are responsible for ensuring you have a lawful basis/consent to email imported contacts, and every campaign must include a working unsubscribe option.
Then, when composing a campaign, choose Mailing list (imported) as the recipient source.
Campaign composer (admin screen)
Background queue processing
Test email before full campaign
Secure unsubscribe links
wp_salt() https://developer.wordpress.org/reference/functions/wp_salt/).Email templates (save/load) (v2.5.0)
Template variables (placeholders)
{{site_name}}{{site_url}}{{recipient_name}}{{recipient_email}}{{unsubscribe_url}}Settings screen
Optional log file (v2.3.3)
wp-content/uploads/my-newsletter/wpnl.log.Basic campaign tracking
If you don’t see progress, read the “WP‑Cron” section below.
On the My Newsletter campaign screen you can reuse content without retyping:
Tip: keep templates generic (e.g. “Welcome email”, “Promo template”), then adjust the final message before queuing.
Use My Newsletter Templates to manage your saved templates:
Templates are local to your site and can be loaded into the campaign composer using Load Email Template.
From name / From email
Used as the sender identity in outgoing messages. WordPress email is sent via wp_mail() and your mail transport decides the final headers (https://developer.wordpress.org/reference/functions/wp_mail/).
Reply‑To (optional)
If you want replies to go to a different inbox than “From”.
Max emails per cron run (batch size)
Limits how many emails each WP‑Cron run tries to send. Smaller batches reduce timeouts on shared hosting.
WP‑Cron is traffic-driven by default (https://developer.wordpress.org/plugins/cron/).
Footer HTML
Appended to every message. Best practice is to include:
{{unsubscribe_url}}).Logging (optional, v2.3.3)
Enable logging when troubleshooting unexpected queue behavior or mail failures.
Logs are stored in wp-content/uploads/my-newsletter/wpnl.log.
{{recipient_name}}, {{recipient_email}}Then click the action button to queue recipients and start sending.
Users
Uses WordPress user emails (typically wp_users.user_email). WordPress user data is stored in core tables (https://developer.wordpress.org/apis/wpdb/).
Commenters
Uses emails from comment records (typically wp_comments.comment_author_email) and only approved comments are considered in typical implementations (WordPress comment basics: https://developer.wordpress.org/reference/functions/get_comments/).
Commenters on a specific post
Same as Commenters, but filtered by post ID.
Mailing list (imported)
Uses subscribers stored by this plugin in its own table. This list is independent from WP users/comments.
You have two import methods: Upload file or Paste.
Best and most reliable method.
Recommended columns
* email (required)
* name (optional)
CSV example
email,name
[email protected],Ana
[email protected],Marko
The plugin will:
* accept comma/semicolon/tab-delimited CSV (delimiter auto-detected),
* accept a header row if it contains email,
* validate emails with WordPress helpers like sanitize_email() and is_email() (https://developer.wordpress.org/reference/functions/sanitize_email/ and https://developer.wordpress.org/reference/functions/is_email/),
* deduplicate by email during the import batch,
* skip emails that are already unsubscribed.
Export from Excel / Google Sheets
* Export to CSV. XLSX support exists, but CSV is safer for complex sheets.
XLSX support is intentionally minimal to keep the plugin lightweight.
Requirements:
* First worksheet (sheet1)
* Column A = email
* Column B = name (optional)
* If cell A1 contains “email”, that row is treated as header and skipped
If your XLSX is more complex, export to CSV first.
Paste supports:
* one email per line,
* comma/semicolon separated emails,
* Name <[email protected]>,
* 2-column lines: email,name or name,email (comma/tab/semicolon).
Examples:
[email protected]
[email protected],Marko
Ana Example ana@example.com
Marko Example marko@example.com
After import, the screen shows:
* imported count,
* invalid count,
* duplicate count,
* skipped unsubscribed count.
After import, you can export and clean the list using:
* Export subscribers CSV,
* Delete selected (bulk),
* Delete all matching search,
* Delete by domain (e.g. example.com).
In My Newsletter Mailing List, you can:
* see the total subscriber count,
* search by email or name,
* browse paginated results,
* export subscribers as CSV,
* delete selected subscribers (bulk),
* delete all subscribers matching the current search (with confirmation),
* delete by domain (e.g. example.com) for quick cleanup.
In Mailing List Suppression list, you can:
* view unsubscribed emails (suppressed),
* export suppression list as CSV,
* remove suppression (admin-only) if you need to re-subscribe someone manually.
This plugin uses WP‑Cron to send queued emails in batches. WP‑Cron runs on site visits (traffic).
On low‑traffic sites, campaigns may send slowly (https://developer.wordpress.org/plugins/cron/).
For reliable sending on production:
* Configure a real server cron to hit wp-cron.php at a fixed interval.
WordPress explains this approach here: https://developer.wordpress.org/plugins/cron/#what-is-wp-cron.
Admin tools:
* In My Newsletter Settings, use Run queue now (admin-only) to process one batch immediately for testing/troubleshooting.
* The Settings screen includes ready-to-copy cron examples (curl/wget) for common hosting setups.
This plugin hands off email to WordPress via wp_mail() (https://developer.wordpress.org/reference/functions/wp_mail/).
Deliverability depends on your mail transport and DNS.
If you care about inbox placement:
* Use an SMTP provider (or transactional email service).
* Use a sender on your own domain.
* Configure SPF/DKIM/DMARC (vendor-specific docs).
The plugin provides unsubscribe links, but it does not enforce consent or double opt‑in.
You must only email people you have a lawful basis to contact and you must honor opt‑outs.