=== RDS Newsletter ===
Contributors: valpd
Tags: newsletter, email, subscribers, mailing list
Requires at least: 6.2
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 1.4.0
License: GPLv2 or later

A self-hosted email newsletter plugin for WordPress with subscriber management, batch sending, open and click tracking, and bounce processing.

== Description ==

RDS Newsletter is a straightforward email newsletter plugin that does not overcomplicate things.

**Features:**
* Import subscribers via CSV or plain text (one email per line)
* Paste raw HTML as your email content
* Optional templates (Basic and Modern included)
* Batch sending with configurable limits (default 500 per hour)
* Subscriber groups for targeted sends
* Double opt-in with confirmation emails
* Open and click tracking with reports
* Automatic unsubscribe links in every email
* Bounce detection with auto-delete via IMAP
* IP address and timestamp logging for compliance
* Signup and unsubscribe shortcodes
* Send test emails before sending to your list
* Schedule newsletters for later
* Duplicate newsletters
* Export subscribers as CSV

== Installation ==

1. Upload the `rds-newsletter` folder to `/wp-content/plugins/`
2. Activate via Plugins menu
3. Go to Newsletter > Settings to configure your company name and batch limits
4. Import your subscribers via Newsletter > Import
5. Compose and send via Newsletter > Compose

== Shortcodes ==

**Signup form:**
`[rdsnl_signup]`

Optional attributes:
* `title="Subscribe to our newsletter"`
* `button_text="Subscribe"`
* `group="3"` (group ID to auto-assign)

**Unsubscribe form:**
`[rdsnl_unsubscribe]`

== Changelog ==

= 1.3.0 =
* Changed plugin prefix from 'rds' (3 chars) to 'rdsnl' (5 chars) across all classes, functions, constants, options, hooks, shortcodes, script handles, and CSS classes to meet WordPress.org 4+ character prefix requirement
* Applied wp_kses_post() sanitization to HTML newsletter content at point of input
* Replaced direct SQL column interpolation with wpdb %i identifier placeholders in ORDER BY clauses and UPDATE field references
* Improved nonce verification comments for email-based URLs (confirm, unsubscribe, tracking) that cannot use nonces
* Bumped minimum WordPress version to 6.2 (required for %i identifier placeholder support)
* Shortcodes renamed: [rdsnl_signup] and [rdsnl_unsubscribe]
* Database table prefix changed from rds_nl_ to rdsnl_ (deactivate and reactivate plugin to recreate tables)

= 1.2.0 =
* Added nonce verification to all admin actions including newsletter duplication
* Added explicit permission checks (current_user_can) to all data-modifying handlers
* Moved all inline JavaScript to properly enqueued external files
* Moved all inline CSS to properly enqueued external stylesheets
* Added public.js and public.css for frontend form handling
* Moved settings page IMAP/bounce scripts into admin.js
* Template data now passed via wp_add_inline_script instead of inline script tag
* Standalone public pages now use wp_print_styles and wp_print_scripts

= 1.1.0 =
* WordPress coding standards compliance
* Improved input sanitization and output escaping
* Updated for WordPress 6.9 compatibility

= 1.0.0 =
* Initial release
