{"id":380421,"date":"2026-10-08T11:52:49","date_gmt":"2026-10-08T11:52:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/eventmail\/"},"modified":"2026-10-08T13:55:40","modified_gmt":"2026-10-08T13:55:40","slug":"postalion","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/postalion\/","author":9149292,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Postalion \u2013 Newsletters and Email Subscribers","header_author":"Alex Gurghis","header_description":"Self-hosted newsletters for WordPress: subscription forms with double opt-in, a newsletter composer with templates, scheduling and batch sending through your own mail service.","assets_banners_color":"f6f2eb","last_updated":"2026-10-08 13:55:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/postalion.fantasythemes.net","header_author_uri":"https:\/\/alexgurghis.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":54,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"agurghis","date":"2026-10-08 13:55:40","revision":3734775}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3734459,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3734459,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3734459,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3734459,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3734459,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3734776,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=postalion\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"postalion\"},\"options\":{\"activate\":true}},{\"step\":\"mkdir\",\"path\":\"\\\/wordpress\\\/wp-content\\\/mu-plugins\"},{\"step\":\"writeFile\",\"path\":\"\\\/wordpress\\\/wp-content\\\/mu-plugins\\\/postalion-preview.php\",\"data\":\"<?php\\n\\\/**\\n * Plugin Name: Postalion preview\\n * Description: Only in the WordPress.org preview: keeps update notices out of the way.\\n *\\\/\\nadd_filter( 'pre_site_transient_update_core', function () {\\n    return (object) array( 'updates' => array(), 'version_checked' => get_bloginfo( 'version' ), 'last_checked' => time() );\\n} );\\nadd_action( 'admin_init', function () {\\n    remove_action( 'admin_notices', 'update_nag', 3 );\\n    remove_action( 'admin_notices', 'maintenance_nag', 10 );\\n} );\\n\"},{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Riverside Events\",\"blogdescription\":\"Concerts, talks and workshops by the river\",\"timezone_string\":\"Europe\\\/Bucharest\",\"permalink_structure\":\"\\\/%postname%\\\/\",\"postalion_sender_name\":\"Riverside Events\",\"postalion_sender_email\":\"hello@riverside-events.test\",\"postalion_batch_size\":100,\"postalion_batch_delay\":1}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\nglobal $wpdb;\\nadd_filter( 'pre_wp_mail', '__return_true', 99 );\\nforeach ( array( array( 'maria', 'Maria Ionescu', 'maria.ionescu@example.com' ), array( 'tudor', 'Tudor Marin', 'tudor.marin@example.com' ) ) as $u ) {\\n    if ( ! username_exists( $u[0] ) ) { wp_insert_user( array( 'user_login' => $u[0], 'display_name' => $u[1], 'user_email' => $u[2], 'user_pass' => wp_generate_password( 24 ), 'role' => 'subscriber' ) ); }\\n}\\n$first = array( 'Ana', 'Andrei', 'Bianca', 'Cristian', 'Daria', 'Emil', 'Flavia', 'George', 'Horia', 'Irina', 'Laura', 'Mihai', 'Nadia', 'Ovidiu', 'Paula', 'Radu', 'Sara', 'Teodor', 'Vlad', 'Wanda', 'Xenia', 'Yvonne', 'Zoe', 'Luca' );\\n$last  = array( 'Pop', 'Stan', 'Rusu', 'Dinu', 'Munteanu', 'Stoica', 'Lazar', 'Barbu', 'Nistor', 'Florea', 'Sandu', 'Tudor', 'Matei' );\\n$sm = new Postalion_Subscriber_Manager(); $t = $wpdb->prefix . 'postalion_subscribers';\\nforeach ( $first as $n => $f ) {\\n    $l = $last[ ( $n * 5 + 3 ) % 13 ]; $status = 0 === $n % 11 ? 'pending' : ( 7 === $n % 17 ? 'unsubscribed' : 'active' );\\n    $id = $sm->add_external_subscriber( array( 'email' => strtolower( \\\"$f.$l\\\" ) . '@example.com', 'first_name' => $f, 'last_name' => $l, 'source' => $n % 3 ? 'form' : 'import', 'status' => $status ) );\\n    if ( ! is_wp_error( $id ) ) {\\n        $when = gmdate( 'Y-m-d H:i:s', time() - ( 50 - 2 * $n ) * DAY_IN_SECONDS );\\n        $wpdb->update( $t, array( 'created_at' => $when, 'subscribed_at' => $when, 'unsubscribed_at' => 'unsubscribed' === $status ? gmdate( 'Y-m-d H:i:s', time() - 2 * DAY_IN_SECONDS ) : null ), array( 'id' => $id ) );\\n        $wpdb->query( $wpdb->prepare( \\\"UPDATE {$wpdb->prefix}postalion_logs SET created_at = %s WHERE message LIKE %s\\\", $when, '%' . $wpdb->esc_like( strtolower( \\\"$f.$l\\\" ) . '@example.com' ) . '%' ) );\\n    }\\n}\\n$nm = new Postalion_Newsletter_Manager();\\n$body = static function ( $title, $text, $cta ) {\\n    return \\\"<h1>$title<\\\/h1><p>Hi {subscriber_name},<\\\/p><p>$text<\\\/p><p style=\\\\\\\"text-align:center;margin:24px 0;\\\\\\\"><a href=\\\\\\\"https:\\\/\\\/example.com\\\/\\\\\\\" style=\\\\\\\"display:inline-block;padding:13px 30px;background:#1b2430;color:#ffffff;text-decoration:none;border-radius:4px;font-weight:600;\\\\\\\">$cta<\\\/a><\\\/p><p>See you by the river,<br>The Riverside team<\\\/p>\\\";\\n};\\n$sent = array(\\n    array( 'Autumn programme: 12 evenings by the river', 'professional', 'The autumn season is here: twelve evenings of music, talks and film, from late September to the first week of December.', 'See the programme', 21 ),\\n    array( 'Last tickets for the Jazz Weekend', 'promotional', 'Fewer than fifty tickets are left for the Jazz Weekend. Three nights, nine bands, one stage by the water.', 'Get your ticket', 9 ),\\n    array( 'Thank you for a full house', 'simple', 'Three sold-out nights, and the warmest audience we could ask for. Photos from the weekend are online.', 'See the photos', 3 ),\\n);\\nforeach ( $sent as $s ) {\\n    $id = (int) $nm->save_newsletter( array( 'subject' => $s[0], 'preheader' => $s[2], 'template_id' => $s[1], 'content' => $body( $s[0], $s[2], $s[3] ), 'send_to' => 'all', 'status' => 'draft' ) );\\n    $nm->send_newsletter( $id ); $guard = 0;\\n    while ( $guard++ < 20 && $wpdb->get_var( $wpdb->prepare( \\\"SELECT COUNT(*) FROM {$wpdb->prefix}postalion_email_queue WHERE newsletter_id = %d AND status = 'pending'\\\", $id ) ) ) {\\n        wp_clear_scheduled_hook( 'postalion_process_queue', array( $id ) ); do_action( 'postalion_process_queue', $id );\\n    }\\n    $when = gmdate( 'Y-m-d H:i:s', time() - $s[4] * DAY_IN_SECONDS );\\n    $wpdb->update( $wpdb->prefix . 'postalion_newsletters', array( 'sent_at' => $when, 'created_at' => $when, 'updated_at' => $when ), array( 'id' => $id ) );\\n    $wpdb->query( $wpdb->prepare( \\\"UPDATE {$wpdb->prefix}postalion_email_log SET sent_at = %s WHERE newsletter_id = %d\\\", $when, $id ) );\\n    $wpdb->query( $wpdb->prepare( \\\"UPDATE {$wpdb->prefix}postalion_logs SET created_at = %s WHERE message LIKE %s\\\", $when, '%' . $wpdb->esc_like( $s[0] ) . '%' ) );\\n}\\n$rich = '<h1>Winter workshops<\\\/h1><p>Hi {subscriber_name},<\\\/p><p>Six workshops in small groups, from printmaking to sound design. Early booking opens on Monday at ten, and the first twenty places in each workshop go at the early price.<\\\/p><table width=\\\"100%\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" style=\\\"margin:20px 0;\\\"><tr><td width=\\\"48%\\\" valign=\\\"top\\\" style=\\\"padding-right:2%;\\\"><h3 style=\\\"margin:0 0 8px 0;\\\">Printmaking weekend<\\\/h3><p style=\\\"margin:0;\\\">Two days at the press with Ioana Dobre. Twelve places.<\\\/p><\\\/td><td width=\\\"48%\\\" valign=\\\"top\\\" style=\\\"padding-left:2%;\\\"><h3 style=\\\"margin:0 0 8px 0;\\\">Sound design basics<\\\/h3><p style=\\\"margin:0;\\\">From field recording to a finished piece. Ten places.<\\\/p><\\\/td><\\\/tr><\\\/table><p style=\\\"text-align:center;margin:24px 0;\\\"><a href=\\\"https:\\\/\\\/example.com\\\/\\\" style=\\\"display:inline-block;padding:13px 30px;background:#1b2430;color:#ffffff;text-decoration:none;border-radius:4px;font-weight:600;\\\">See all six workshops<\\\/a><\\\/p><p>See you by the river,<br>The Riverside team<\\\/p>';\\n$id = (int) $nm->save_newsletter( array( 'subject' => 'Winter workshops: early booking opens Monday', 'preheader' => 'Six workshops, small groups, booking opens Monday at 10.', 'template_id' => 'basic', 'content' => $rich, 'send_to' => 'all', 'status' => 'draft' ) );\\nPostalion_Scheduled_Sender::reschedule( $id, wp_date( 'Y-m-d 10:00:00', time() + 4 * DAY_IN_SECONDS ) );\\n$nm->save_newsletter( array( 'subject' => 'December gala: save the date', 'template_id' => 'minimal', 'content' => $body( 'Save the date', 'Our December gala is on the 14th, in the old boathouse. Invitations follow next week.', 'Reply to this email' ), 'send_to' => 'all', 'status' => 'draft' ) );\\ndelete_option( 'postalion_newsletter_progress' );\\nupdate_option( 'postalion_test_email_sent', '1' );\\ndelete_option( 'postalion_show_welcome_notice' );\\nif ( ! get_page_by_path( 'newsletter' ) ) {\\n    wp_insert_post( array( 'post_type' => 'page', 'post_status' => 'publish', 'post_title' => 'Newsletter', 'post_name' => 'newsletter', 'post_content' => '<p>Concert dates, early tickets and the occasional behind-the-scenes story. One or two emails a month.<\\\/p>[postalion_form title=\\\"Join the Riverside newsletter\\\" description=\\\"No spam. Unsubscribe with one click.\\\"]' ) );\\n}\\ndelete_transient( 'postalion_has_form_page' );\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3734775,"resolution":"1","location":"assets","locale":"","width":2880,"height":1800},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3734459,"resolution":"10","location":"assets","locale":"","width":2880,"height":1800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3734459,"resolution":"2","location":"assets","locale":"","width":2880,"height":1800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3734459,"resolution":"3","location":"assets","locale":"","width":1664,"height":1654},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3734459,"resolution":"4","location":"assets","locale":"","width":2880,"height":1800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3734459,"resolution":"5","location":"assets","locale":"","width":2880,"height":1800},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3734459,"resolution":"6","location":"assets","locale":"","width":2880,"height":1800},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3734459,"resolution":"7","location":"assets","locale":"","width":2880,"height":1800},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3734459,"resolution":"8","location":"assets","locale":"","width":2880,"height":1800},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3734459,"resolution":"9","location":"assets","locale":"","width":2880,"height":1800}},"screenshots":{"1":"Postalion in one picture: the dashboard and an email on a phone. Forms, templates, background sending and a log of every email, all inside your WordPress.","2":"The composer: subject, template, and the send and schedule controls.","3":"The editor with content blocks and personalisation.","4":"Preview of a newsletter before it goes out.","5":"Subscribers, with status, filters and bulk actions.","6":"A send in progress.","7":"The email log, with a preview of every email.","8":"The five email templates.","9":"Settings: sender, double opt-in, sending speed and maintenance.","10":"The sign-up form on a page of the site."}},"plugin_section":[262246],"plugin_tags":[264,5825,455,6696,1016],"plugin_category":[41,42],"plugin_contributors":[146864],"plugin_business_model":[],"class_list":["post-380421","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-email-marketing","plugin_tags-mailing-list","plugin_tags-newsletter","plugin_tags-smtp","plugin_tags-subscribers","plugin_category-communication","plugin_category-contact-forms","plugin_contributors-agurghis","plugin_committers-agurghis"],"banners":{"banner":"https:\/\/ps.w.org\/postalion\/assets\/banner-772x250.png?rev=3734459","banner_2x":"https:\/\/ps.w.org\/postalion\/assets\/banner-1544x500.png?rev=3734459","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/postalion\/assets\/icon.svg?rev=3734459","icon":"https:\/\/ps.w.org\/postalion\/assets\/icon.svg?rev=3734459","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-1.png?rev=3734775","caption":"Postalion in one picture: the dashboard and an email on a phone. Forms, templates, background sending and a log of every email, all inside your WordPress."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-2.png?rev=3734459","caption":"The composer: subject, template, and the send and schedule controls."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-3.png?rev=3734459","caption":"The editor with content blocks and personalisation."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-4.png?rev=3734459","caption":"Preview of a newsletter before it goes out."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-5.png?rev=3734459","caption":"Subscribers, with status, filters and bulk actions."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-6.png?rev=3734459","caption":"A send in progress."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-7.png?rev=3734459","caption":"The email log, with a preview of every email."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-8.png?rev=3734459","caption":"The five email templates."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-9.png?rev=3734459","caption":"Settings: sender, double opt-in, sending speed and maintenance."},{"src":"https:\/\/ps.w.org\/postalion\/assets\/screenshot-10.png?rev=3734459","caption":"The sign-up form on a page of the site."}],"raw_content":"<!--section=description-->\n<p>Postalion is a newsletter plugin that runs entirely on your own site. It collects subscribers, sends your newsletters in the background and keeps a record of every email. Your list stays in your WordPress database and the mail goes out through <code>wp_mail()<\/code>, so it uses whatever SMTP plugin or mail service you already have.<\/p>\n\n<p>There are no limits on subscribers or on how often you send, no account to create, and the plugin makes no requests to outside servers.<\/p>\n\n<h4>Write<\/h4>\n\n<ul>\n<li>Newsletter composer with five email templates: Classic, Letter, Bulletin, Announcement and Card<\/li>\n<li>Content blocks made for email: headline, button, two columns, image and text, note, divider, spacer, social links<\/li>\n<li>Personalisation: subscriber name and email, site name and address<\/li>\n<li>Preview for desktop and phone, and a test email to yourself<\/li>\n<li>The templates show your site logo, or the site name when there is no logo<\/li>\n<\/ul>\n\n<h4>Send<\/h4>\n\n<ul>\n<li>Background sending in batches: the first batch goes out at once, the rest through WP-Cron<\/li>\n<li>Batch size and pause between batches are yours to set (default: 10 emails every 5 seconds)<\/li>\n<li>Send now, or schedule a date and time<\/li>\n<li>Live progress, with stop and resume<\/li>\n<li>An interrupted send continues where it stopped; nobody gets the same email twice<\/li>\n<\/ul>\n\n<h4>Grow<\/h4>\n\n<ul>\n<li>Sign-up form by shortcode, with double opt-in<\/li>\n<li>CSV import and export<\/li>\n<li>The users of your site are subscribers too, and can opt out from their profile<\/li>\n<li>Search, filters and bulk actions<\/li>\n<\/ul>\n\n<h4>Keep track<\/h4>\n\n<ul>\n<li>Email log: every email with its recipient, date and result, and a preview of the email as that person received it<\/li>\n<li>Activity log: sign-ups, confirmations, unsubscribes, imports and sends<\/li>\n<li>System log for errors and warnings<\/li>\n<li>Log entries are deleted automatically after a period you choose (90 days by default)<\/li>\n<\/ul>\n\n<h4>Respect<\/h4>\n\n<ul>\n<li>Unsubscribe link in every email, plus one-click unsubscribe for mail clients that support it (List-Unsubscribe-Post)<\/li>\n<li>No tracking pixels and no rewritten links<\/li>\n<li>Supports the WordPress tools for exporting and erasing personal data<\/li>\n<li>No telemetry and no external requests<\/li>\n<\/ul>\n\n<h4>Shortcodes<\/h4>\n\n<ul>\n<li><code>[postalion_form]<\/code> \u2013 sign-up form. Attributes: <code>title<\/code>, <code>description<\/code>, <code>button_text<\/code>, <code>show_name=\"false\"<\/code>, <code>class<\/code>.<\/li>\n<li><code>[postalion_unsubscribe]<\/code> \u2013 unsubscribe form.<\/li>\n<li><code>[postalion_subscriber_count]<\/code> \u2013 number of people on your list.<\/li>\n<\/ul>\n\n<h4>For developers<\/h4>\n\n<p>Filters and actions for add-ons: <code>postalion_templates<\/code>, <code>postalion_logo_url<\/code>, <code>postalion_newsletter_recipients<\/code>, <code>postalion_email_content<\/code>, <code>postalion_email_sent<\/code>, <code>postalion_subscriber_confirmed<\/code>, <code>postalion_admin_menu<\/code>.<\/p>\n\n<h4>Pro<\/h4>\n\n<p>A Pro add-on is being built for larger lists and more advanced work: a drag-and-drop builder, opens and clicks, segments, automation and A\/B testing. The free plugin is complete on its own and has no limits to remove. More at <a href=\"https:\/\/postalion.fantasythemes.net\">postalion.fantasythemes.net<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install Postalion from the Plugins screen, or upload the <code>postalion<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate it.<\/li>\n<li>Open <strong>Postalion \u2192 Settings<\/strong>, check the sender name and address, and send yourself a test email.<\/li>\n<li>Put <code>[postalion_form]<\/code> on a page so visitors can sign up, or import your list under <strong>Postalion \u2192 Subscribers<\/strong>.<\/li>\n<li>Write your first newsletter under <strong>Postalion \u2192 Newsletters<\/strong>.<\/li>\n<\/ol>\n\n<p>For reliable delivery, connect an SMTP plugin (WP Mail SMTP, FluentSMTP, Post SMTP) to a mail service. Postalion uses it automatically.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20are%20the%20emails%20sent%3F\"><h3>How are the emails sent?<\/h3><\/dt>\n<dd><p>Through the standard <code>wp_mail()<\/code> function. On most hosts that works for a small list. For reliable delivery use an SMTP plugin connected to a mail service such as Amazon SES, Mailgun, Postmark or Brevo; the mail servers of shared hosting are often blocklisted.<\/p><\/dd>\n<dt id=\"how%20many%20emails%20can%20i%20send%3F\"><h3>How many emails can I send?<\/h3><\/dt>\n<dd><p>As many as your host or mail service allows. Postalion does not count. Set the batch size and the pause between batches under <strong>Postalion \u2192 Settings<\/strong> to stay inside their limits.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20cron%20job%3F\"><h3>Do I need a cron job?<\/h3><\/dt>\n<dd><p>No. Sending runs on WP-Cron, which WordPress triggers when someone visits the site. On a site with very little traffic, a real cron job for <code>wp-cron.php<\/code> keeps batches and scheduled newsletters on time.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20someone%20clicks%20the%20unsubscribe%20link%3F\"><h3>What happens when someone clicks the unsubscribe link?<\/h3><\/dt>\n<dd><p>They see a short page asking them to confirm, and one click on the button unsubscribes them. The link itself does not unsubscribe, so mail scanners that open links cannot remove people by accident. Mail clients with a built-in unsubscribe button unsubscribe at once.<\/p><\/dd>\n<dt id=\"does%20it%20help%20with%20gdpr%3F\"><h3>Does it help with GDPR?<\/h3><\/dt>\n<dd><p>It gives you the tools: double opt-in (on by default), an unsubscribe link in every email, support for the WordPress personal data export and erase requests, and automatic deletion of old log entries. It does not track opens or clicks, and no data leaves your site except the emails you send. What you send, and to whom, remains your responsibility.<\/p><\/dd>\n<dt id=\"can%20i%20import%20my%20existing%20subscribers%3F\"><h3>Can I import my existing subscribers?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>Postalion \u2192 Subscribers \u2192 Import CSV<\/strong>. The file needs an email column; first name and last name are optional. Addresses already on the list are skipped, and people who unsubscribed stay unsubscribed. Only import people who agreed to receive email from you.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20look%20of%20the%20sign-up%20form%3F\"><h3>Can I change the look of the sign-up form?<\/h3><\/dt>\n<dd><p>The form takes the font of your theme. Three CSS custom properties change the rest: <code>--postalion-accent<\/code>, <code>--postalion-accent-text<\/code> and <code>--postalion-radius<\/code>, set on <code>.postalion-subscription-form<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20add%20my%20own%20email%20template%3F\"><h3>Can I add my own email template?<\/h3><\/dt>\n<dd><p>Yes, with the <code>postalion_templates<\/code> filter: register a name, a description and the path to an HTML file that contains <code>{content}<\/code>.<\/p><\/dd>\n<dt id=\"is%20it%20translation%20ready%3F\"><h3>Is it translation ready?<\/h3><\/dt>\n<dd><p>Yes. Every text in the plugin, including the footer of the emails, can be translated.<\/p><\/dd>\n<dt id=\"where%20is%20the%20data%20stored%2C%20and%20how%20do%20i%20remove%20it%3F\"><h3>Where is the data stored, and how do I remove it?<\/h3><\/dt>\n<dd><p>In six tables in your WordPress database. Deleting the plugin keeps the data unless you turn on <strong>Delete all data when the plugin is deleted<\/strong> under Settings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Newsletters from your own WordPress: sign-up forms, a composer with templates, background sending and a log of every email. No limits.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/380421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=380421"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/agurghis"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=380421"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=380421"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=380421"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=380421"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=380421"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=380421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}