{"id":284340,"date":"2026-03-22T14:01:34","date_gmt":"2026-03-22T14:01:34","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mailtrap-mailer\/"},"modified":"2026-09-19T22:22:51","modified_gmt":"2026-09-19T22:22:51","slug":"swifttrap-for-mailtrap","status":"publish","type":"plugin","link":"https:\/\/kab.wordpress.org\/plugins\/swifttrap-for-mailtrap\/","author":16869097,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.0.3","stable_tag":"3.0.3","tested":"7.1.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"SwiftTrap for Mailtrap","header_author":"simmotorlp","header_description":"Routes wp_mail() through the Mailtrap HTTP API with configurable sender settings.","assets_banners_color":"1564c1","last_updated":"2026-09-19 22:22:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugins.symonov.com\/swifttrap-for-mailtrap\/","header_author_uri":"https:\/\/profiles.wordpress.org\/simmotorlp\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":787,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.2.0":{"tag":"2.2.0","author":"simmotorlp","date":"2026-03-22 14:01:06","revision":3488232},"2.2.2":{"tag":"2.2.2","author":"simmotorlp","date":"2026-05-08 09:47:38","revision":3526338},"2.3.0":{"tag":"2.3.0","author":"simmotorlp","date":"2026-06-01 06:34:28","revision":3556239},"2.4.0":{"tag":"2.4.0","author":"simmotorlp","date":"2026-06-01 07:21:19","revision":3556302},"2.4.1":{"tag":"2.4.1","author":"simmotorlp","date":"2026-06-02 06:19:37","revision":3557509},"2.4.2":{"tag":"2.4.2","author":"simmotorlp","date":"2026-06-05 06:51:23","revision":3561936},"3.0.0":{"tag":"3.0.0","author":"simmotorlp","date":"2026-06-08 13:47:38","revision":3564795},"3.0.1":{"tag":"3.0.1","author":"simmotorlp","date":"2026-07-03 11:48:05","revision":3595193},"3.0.2":{"tag":"3.0.2","author":"simmotorlp","date":"2026-09-19 21:56:26","revision":3703693},"3.0.3":{"tag":"3.0.3","author":"simmotorlp","date":"2026-09-19 22:22:51","revision":3703703}},"upgrade_notice":{"3.0.3":"<p>Adds a one-time, dismissible review request (shown a week after your first email is sent). No changes to email delivery.<\/p>","3.0.2":"<p>Compatibility release: tested with WordPress 7.1. No functional changes.<\/p>","3.0.1":"<p>Important fix: webhook delivery-tracking events from Mailtrap were being rejected due to a signature-verification mismatch and have never been processed since 2.4.0. Update if you use the webhook integration.<\/p>","2.4.0":"<p>Upgrades WordPress plugin to 2.4.0, introducing delivery tracking webhooks, suppression management, graceful native fallback, enhanced logs UI with CSV export, WP-CLI commands, and a WordPress Site Health check.<\/p>","2.3.0":"<p>Minor reliability release: automatic sending retries on transient API errors, cron-based log cleanup, and modern PHP 8 updates.<\/p>","2.2.2":"<p>Plugin URI now points to the dedicated landing page on plugins.symonov.com. No code changes.<\/p>","2.2.1":"<p>Documentation-only release. Refreshed readme and confirmed compatibility with WordPress 7.0.<\/p>","2.2.0":"<p>WordPress Coding Standards pass \u2014 WP_Filesystem API, hardened input sanitization, and improved PHPDoc. No configuration changes required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3488238,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3488238,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3488238,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3488238,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.2.0","2.2.2","2.3.0","2.4.0","2.4.1","2.4.2","3.0.0","3.0.1","3.0.2","3.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3526338,"resolution":"1","location":"assets","locale":"","width":1280,"height":639},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3526338,"resolution":"2","location":"assets","locale":"","width":1280,"height":777},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3526338,"resolution":"3","location":"assets","locale":"","width":1280,"height":509},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3526338,"resolution":"4","location":"assets","locale":"","width":948,"height":248},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3526338,"resolution":"5","location":"assets","locale":"","width":1280,"height":237}},"screenshots":{"1":"Settings page \u2014 API token, verified sender, stream routing.","2":"Stats page \u2014 sending domain verification status and suppression list (bounces, complaints, unsubscribes).","3":"Email log \u2014 live Mailtrap API data with filters and pagination.","4":"Dashboard widget showing integration status, sender, and quick links to Stats and Settings.","5":"Test email confirmation."}},"plugin_section":[262246],"plugin_tags":[206386,26736,41913,48586,41812],"plugin_category":[41],"plugin_contributors":[254989],"plugin_business_model":[],"class_list":["post-284340","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-email-api","plugin_tags-email-log","plugin_tags-mailtrap","plugin_tags-transactional-email","plugin_tags-wp-mail","plugin_category-communication","plugin_contributors-simmotorlp","plugin_committers-simmotorlp"],"banners":{"banner":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/banner-772x250.png?rev=3488238","banner_2x":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/banner-1544x500.png?rev=3488238","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/icon-128x128.png?rev=3488238","icon_2x":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/icon-256x256.png?rev=3488238","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/screenshot-1.png?rev=3526338","caption":"Settings page \u2014 API token, verified sender, stream routing."},{"src":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/screenshot-2.png?rev=3526338","caption":"Stats page \u2014 sending domain verification status and suppression list (bounces, complaints, unsubscribes)."},{"src":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/screenshot-3.png?rev=3526338","caption":"Email log \u2014 live Mailtrap API data with filters and pagination."},{"src":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/screenshot-4.png?rev=3526338","caption":"Dashboard widget showing integration status, sender, and quick links to Stats and Settings."},{"src":"https:\/\/ps.w.org\/swifttrap-for-mailtrap\/assets\/screenshot-5.png?rev=3526338","caption":"Test email confirmation."}],"raw_content":"<!--section=description-->\n<p><strong>SwiftTrap<\/strong> is a drop-in replacement for <code>wp_mail()<\/code> that routes WordPress email through the <strong>Mailtrap Email Sending API<\/strong> instead of SMTP. It is purpose-built for Mailtrap \u2014 not a generic SMTP plugin with a Mailtrap preset \u2014 so it exposes Mailtrap-native features that SMTP cannot: bulk vs transactional stream routing, email categories, custom variables for tracking, suppression lists, and domain verification status.<\/p>\n\n<h4>Why HTTP API instead of SMTP?<\/h4>\n\n<ul>\n<li><strong>Lower latency<\/strong> \u2014 one HTTPS call per message, no MAIL FROM \/ RCPT TO \/ DATA round-trips.<\/li>\n<li><strong>Better deliverability<\/strong> \u2014 Mailtrap routes API messages through its dedicated transactional and bulk streams; SMTP doesn't expose stream selection.<\/li>\n<li><strong>Native categories<\/strong> \u2014 every email is automatically categorized (welcome, password-reset, notification, marketing, etc.) so you can filter and report on them in Mailtrap.<\/li>\n<li><strong>No firewall headaches<\/strong> \u2014 port 587\/465 blocked? API works over standard HTTPS 443.<\/li>\n<\/ul>\n\n<h4>Why SwiftTrap and not WP Mail SMTP \/ Post SMTP<\/h4>\n\n<ul>\n<li>Generic SMTP plugins use Mailtrap's SMTP credentials and lose every Mailtrap-only feature.<\/li>\n<li>SwiftTrap calls <code>send.api.mailtrap.io<\/code> for transactional mail and <code>bulk.api.mailtrap.io<\/code> for bulk mail \u2014 automatically, based on category or via filter.<\/li>\n<li>No Mailtrap PHP SDK required. Plugin is <strong>~30 KB total<\/strong> and uses only the WordPress HTTP API (<code>wp_remote_post<\/code>).<\/li>\n<li>Stats page shows your sending domain verification status and the live suppression list (bounces, complaints, unsubscribes).<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Drop-in replacement for <code>wp_mail()<\/code> \u2014 works with WooCommerce, Contact Form 7, Gravity Forms, and any plugin that uses WordPress mail.<\/li>\n<li>Automatic email categorization and stream routing overrides via settings grid.<\/li>\n<li>Delivery Tracking &amp; Webhooks \u2014 Real-time event tracking via custom REST route <code>swifttrap\/v1\/webhook<\/code>.<\/li>\n<li>Suppression Management \u2014 CRUD panel for Mailtrap suppression lists with pre-send recipient suppression checks.<\/li>\n<li>Reliability Fallback \u2014 Graceful failover back to WordPress native <code>wp_mail()<\/code> if the Mailtrap API call fails.<\/li>\n<li>Site Health integration \u2014 Verification test checking Mailtrap token status and sending domain verification.<\/li>\n<li>Live Email Log \u2014 Browse and filter delivery data pulled directly from the Mailtrap API; search by recipient address, status, or date range with automatic pagination.<\/li>\n<li>WP-CLI commands \u2014 Command-line management via <code>wp swifttrap<\/code> (test, stats, prune-logs, send-suppression-sync).<\/li>\n<li>Attachment size guard \u2014 Configurable limits to prevent oversized files from rejecting at the API gateway.<\/li>\n<li>Test email button on the settings page.<\/li>\n<li>Mailtrap template support via <code>template_uuid<\/code>.<\/li>\n<li>Falls back to default WordPress mail handler when disabled or token is empty.<\/li>\n<\/ul>\n\n<h4>Extensible via filters<\/h4>\n\n<ul>\n<li><code>swifttrap_mailtrap_email_category<\/code> \u2014 override the auto-detected email category.<\/li>\n<li><code>swifttrap_mailtrap_use_bulk_stream<\/code> \u2014 force a message into the bulk or transactional stream.<\/li>\n<li><code>swifttrap_mailtrap_template<\/code> \u2014 send via a Mailtrap template by <code>template_uuid<\/code>.<\/li>\n<li><code>swifttrap_mailtrap_custom_variables<\/code> \u2014 attach tracking metadata to outgoing emails.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>This plugin sends email payloads (recipients, subject, body, attachments) to the Mailtrap API at <code>send.api.mailtrap.io<\/code> and <code>bulk.api.mailtrap.io<\/code>. Account stats and email logs are fetched from <code>mailtrap.io\/api\/accounts<\/code> and <code>mailtrap.io\/api\/email_logs<\/code>. See the <a href=\"https:\/\/mailtrap.io\/privacy-policy\">Mailtrap Privacy Policy<\/a>. No data is sent anywhere else.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install from <strong>Plugins \u2192 Add New<\/strong> and search for <em>SwiftTrap for Mailtrap<\/em>, or upload the <code>swifttrap-for-mailtrap<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>Mailtrap \u2192 Settings<\/strong>.<\/li>\n<li>Paste your Mailtrap <strong>Send API token<\/strong> (Mailtrap dashboard \u2192 Sending Domains \u2192 API Tokens).<\/li>\n<li>Set your verified sender email and name.<\/li>\n<li>Click <strong>Send test email<\/strong> to verify delivery.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20use%20swifttrap%20instead%20of%20wp%20mail%20smtp%20or%20post%20smtp%20with%20mailtrap%20credentials%3F\"><h3>Why use SwiftTrap instead of WP Mail SMTP or Post SMTP with Mailtrap credentials?<\/h3><\/dt>\n<dd><p>WP Mail SMTP and Post SMTP route through Mailtrap's SMTP gateway and treat Mailtrap as just another SMTP host. SwiftTrap uses Mailtrap's HTTP Send API, which exposes features SMTP cannot: bulk vs transactional stream routing, categories, custom tracking variables, template UUIDs, and live suppression-list visibility. Use SwiftTrap if you want Mailtrap-native behavior; use a generic SMTP plugin if you want a one-config-fits-all-providers setup.<\/p><\/dd>\n<dt id=\"does%20it%20support%20mailtrap%20email%20templates%3F\"><h3>Does it support Mailtrap email templates?<\/h3><\/dt>\n<dd><p>Yes \u2014 use the <code>swifttrap_mailtrap_template<\/code> filter to send via a <code>template_uuid<\/code>. The template variables can be passed through Mailtrap's standard template-variables payload.<\/p><\/dd>\n<dt id=\"how%20does%20bulk%20stream%20routing%20work%3F\"><h3>How does bulk stream routing work?<\/h3><\/dt>\n<dd><p>By default, marketing\/promotional categories are routed to <code>bulk.api.mailtrap.io<\/code> and everything else to <code>send.api.mailtrap.io<\/code>. Override per-message with the <code>swifttrap_mailtrap_use_bulk_stream<\/code> filter \u2014 useful for batch newsletters from a custom plugin.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20my%20api%20token%3F\"><h3>Where do I get my API token?<\/h3><\/dt>\n<dd><p>Log in to <a href=\"https:\/\/mailtrap.io\">mailtrap.io<\/a>, open your sending domain, go to <strong>API Tokens<\/strong>, and create a token with sending permissions.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20disable%20the%20plugin%20or%20remove%20the%20token%3F\"><h3>What happens if I disable the plugin or remove the token?<\/h3><\/dt>\n<dd><p>WordPress falls back to its default <code>wp_mail()<\/code> handler. No emails are silently dropped.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20require%20the%20mailtrap%20php%20sdk%3F\"><h3>Does the plugin require the Mailtrap PHP SDK?<\/h3><\/dt>\n<dd><p>No. SwiftTrap calls the Mailtrap REST API directly via the WordPress HTTP API. Total plugin size is around 30 KB.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20externally%3F\"><h3>What data is sent externally?<\/h3><\/dt>\n<dd><p>Email data (recipients, subject, body, attachments) goes to <code>send.api.mailtrap.io<\/code> and <code>bulk.api.mailtrap.io<\/code>. Account stats are fetched from <code>mailtrap.io\/api\/accounts<\/code>. See the <a href=\"https:\/\/mailtrap.io\/privacy-policy\">Mailtrap Privacy Policy<\/a>.<\/p><\/dd>\n<dt id=\"is%20there%20an%20attachment%20size%20limit%3F\"><h3>Is there an attachment size limit?<\/h3><\/dt>\n<dd><p>Yes \u2014 25 MB per email (matches Mailtrap's API limit).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.0.3<\/h4>\n\n<ul>\n<li>New: a one-time, dismissible request to leave a review on WordPress.org. It appears only a week after your first email goes out through Mailtrap, only to administrators and only on the plugin's own screens. \"Maybe later\" snoozes it for 30 days, \"Don't ask again\" hides it for good. Nothing is sent anywhere.<\/li>\n<\/ul>\n\n<h4>3.0.2<\/h4>\n\n<ul>\n<li>Tested with WordPress 7.1 (verified on 7.1.1). No functional changes.<\/li>\n<\/ul>\n\n<h4>3.0.1<\/h4>\n\n<ul>\n<li>Fixed: Webhook receiver now verifies Mailtrap's actual <code>Mailtrap-Signature<\/code> HMAC-SHA256 header instead of a header Mailtrap never sends. Every real delivery-tracking webhook call was being rejected outright since the feature shipped in 2.4.0.<\/li>\n<li>Fixed: Webhook payload parsing now unwraps Mailtrap's <code>{\"events\": [...]}<\/code> envelope correctly, so verified events reach <code>do_action('swifttrap_mailtrap_webhook_event', ...)<\/code>.<\/li>\n<li>Fixed: Usage card on the Stats page now calls Mailtrap's current <code>\/api\/billing\/usage<\/code> endpoint instead of a stale account-scoped path that returned no data.<\/li>\n<li>Fixed: Uninstalling the plugin now clears the actual cached transients instead of pre-2.3.0 key names that no longer match.<\/li>\n<li>Improved: Email Logs recipient search and account API calls now consistently use bracketed filter syntax and Bearer-token authentication.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Breaking: Removed all local file-based email logging. No more log files written to disk \u2014 eliminates OOM\/disk-full risk on high-volume sites.<\/li>\n<li>New: Email Logs panel on the Stats page pulls live data directly from the Mailtrap API (<code>GET \/api\/email_logs<\/code>).<\/li>\n<li>New: Email Logs support filtering by recipient email address, delivery status, and date range.<\/li>\n<li>New: Client-side pagination \u2014 buffers up to 1,000 entries from Mailtrap per API call, displays 20 rows at a time with Prev\/Next navigation. Automatically fetches the next batch when the buffer is exhausted.<\/li>\n<li>New: Webhook handler now fires <code>do_action('swifttrap_mailtrap_webhook_event', $event)<\/code> for every delivery event, allowing third-party integrations without modifying the plugin.<\/li>\n<li>Removed: CSV export, log file clear, log detail modal, log resend, per-page logs setting, and cron-based log cleanup. All replaced by the live API view.<\/li>\n<li>Fixed: Stats page no longer creates a redundant nonce attribute on the wrapper element.<\/li>\n<\/ul>\n\n<h4>2.4.2<\/h4>\n\n<ul>\n<li>Fixed: The email log dropped most entries during high-volume or concurrent sends. Each write re-read and rewrote the whole log file, so parallel processes overwrote each other's lines. Writes now use an atomic, exclusively-locked append, so the Stats dashboard (sends-per-day, categories, totals) reflects the real number of sent emails.<\/li>\n<li>Improved: Logging no longer slows down large mailings \u2014 appends are O(1) instead of re-reading and rewriting the entire file on every email.<\/li>\n<\/ul>\n\n<h4>2.4.1<\/h4>\n\n<ul>\n<li>Fixed: Suppression list now reads the Mailtrap <code>type<\/code> field, so the dashboard shows real BOUNCE \/ COMPLAINT \/ UNSUBSCRIBE \/ MANUAL counts instead of marking every record as manual.<\/li>\n<li>New: Suppression rows display the message bounce category (when provided) for hard-bounce detail.<\/li>\n<li>Fixed: Suppression dates are now formatted server-side using the site's date format instead of the browser locale.<\/li>\n<li>New: \"View all in Mailtrap\" link on the Suppressions card.<\/li>\n<li>New: Per-page selector (10\/25\/50\/100) on the Email Logs screen.<\/li>\n<li>Improved: Email Logs header actions aligned to the right; date filter input restyled to match other fields.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>New: REST Webhook Endpoint (<code>swifttrap\/v1\/webhook<\/code>) for tracking delivered, bounced, opened, and clicked statuses.<\/li>\n<li>New: Suppression Management CRUD in Admin Stats and pre-send recipient checks to skip suppressed emails.<\/li>\n<li>New: Fallback mechanism returning <code>null<\/code> in <code>pre_wp_mail<\/code> on API failure so native <code>wp_mail<\/code> sends the email instead.<\/li>\n<li>New: Site Health connection and verified domain status test.<\/li>\n<li>New: Upgraded Admin logs UI with search, filtering, CSV export, iframe payload preview modals, and resend actions.<\/li>\n<li>New: Category settings grid for category stream mapping rules and sender overrides.<\/li>\n<li>New: WP-CLI namespace <code>wp swifttrap<\/code> (test, stats, prune-logs, send-suppression-sync).<\/li>\n<li>New: Attachment size guard setting.<\/li>\n<li>Refactored: Extracted CSV row formatter into a helper function for unit tests. Fully covered and verified by the test suite.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>PHP 8.0 is now the minimum; tested up to WordPress 7.0.<\/li>\n<li>Reliability: automatic retry with backoff on transient Mailtrap API errors (429\/5xx, honors Retry-After).<\/li>\n<li>Deterministic log retention via a daily cron event (replaces the previous probabilistic cleanup).<\/li>\n<li>Account\/stats\/domain\/suppression caches are now keyed per API token, so switching tokens no longer serves stale data.<\/li>\n<li>Robust JSON handling for all Mailtrap API responses; multisite-safe settings cache.<\/li>\n<li>New: \"Verify token\" button on the settings screen.<\/li>\n<li>Code modernized to PHP 8 idioms; first unit-test suite added.<\/li>\n<\/ul>\n\n<h4>2.2.2<\/h4>\n\n<ul>\n<li>Plugin URI: now points to the dedicated landing page at https:\/\/plugins.symonov.com\/swifttrap-for-mailtrap\/<\/li>\n<li>No code or behavior changes<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Readme: USP-first rewrite emphasizing Mailtrap Email API (vs SMTP) and bulk\/transactional stream routing<\/li>\n<li>Tags: replaced <code>email<\/code>\/<code>mail<\/code>\/<code>smtp<\/code> with targeted <code>mailtrap<\/code>, <code>transactional-email<\/code>, <code>email-api<\/code>, <code>wp-mail<\/code>, <code>email-log<\/code><\/li>\n<li>FAQ: added comparison with WP Mail SMTP \/ Post SMTP, Mailtrap template support, and bulk stream routing<\/li>\n<li>Tested up to WordPress 7.0<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Replaced all file_get_contents\/file_put_contents with WP_Filesystem API<\/li>\n<li>Fixed $_GET sanitization with proper wp_unslash() and phpcs annotations<\/li>\n<li>Improved PHPDoc headers across all files<\/li>\n<li>Better WordPress Coding Standards compliance<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added sending domain verification status on Stats page<\/li>\n<li>Added suppression list (bounces, complaints, unsubscribes) on Stats page<\/li>\n<li>Added <code>swifttrap_mailtrap_template<\/code> filter for Mailtrap template support<\/li>\n<li>Added <code>swifttrap_mailtrap_custom_variables<\/code> filter for email tracking metadata<\/li>\n<li>Extracted reusable <code>swifttrap_mailtrap_get_account_id()<\/code> with transient caching<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Removed Mailtrap SDK dependency \u2014 uses WordPress HTTP API directly<\/li>\n<li>Zero external dependencies, ~30 KB total plugin size<\/li>\n<li>Improved WP.org compliance<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Security: protected log directory from direct web access<\/li>\n<li>Added attachment size validation (25 MB limit)<\/li>\n<li>Added empty recipient validation<\/li>\n<li>Fixed timezone handling in log display<\/li>\n<li>Optimized email category computation<\/li>\n<li>Improved log file locking<\/li>\n<\/ul>","raw_excerpt":"Send WordPress emails through the Mailtrap Email API (not SMTP). Bulk and transactional streams, categories, suppression list, email log.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/284340","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=284340"}],"author":[{"embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/simmotorlp"}],"wp:attachment":[{"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=284340"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=284340"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=284340"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=284340"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=284340"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kab.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=284340"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}