Open-source Email & SMS marketing
you host yourself
Full control over data, ready-made integrations, AI for content creation, automation and webhooks. Set up in Docker in 5 minutes.

AI Campaign Architect
Strategic Email + SMS campaign planner that creates your plan, logic, and forecasts — before you send your first message.
Business context → Audience → AI Strategy → Forecast & Export
Message timeline, goals (education/sales/reminder) and IF/THEN logic
Industry benchmarks + sliders that calculate ROI in real-time

Why NetSendo?
Built for developers who want control, privacy, and flexibility without sacrificing modern features.
How it works
Deploy in Docker
Run docker compose up. NetSendo starts in seconds with Postgres and Redis included.
Add Mailbox
Connect your SMTP server, Gmail, or API provider like SendGrid/Mailgun.
Plan & Launch
Design campaign strategy in Campaign Architect, export to campaigns and launch.
Let AI write your
campaigns in seconds
Stop staring at a blank screen. Netsendo's AI assistant can generate engaging subject lines, write full email body content, and even take voice dictation to craft your message.
Multi-Model Support
Use OpenAI GPT-4o, Anthropic Claude 3.5, or Google Gemini. Your API key, your rules.
Voice Dictation
Just speak your ideas. The AI will transcribe and format them into a professional newsletter.

┌─────────────────┐ STDIO ┌─────────────────┐
│ Claude/Cursor │ ◄────────────► │ MCP Server │
│ (AI Client) │ │ (Docker/npx) │
└─────────────────┘ └────────┬────────┘
│
HTTP/S
│
┌────────▼────────┐
│ NetSendo │
│ (Your inst.) │
└─────────────────┘Supported AI Clients
Example query
"Show my mailing lists and add a new subscriber jan@example.com to Newsletter"
Manage NetSendo with
natural language
Connect Claude, Cursor, or VS Code to your NetSendo instance. Ask questions, manage subscribers, and send messages — all through conversation with AI.
Natural language
Ask 'How many subscribers do I have?' or 'Send an email to John'.
No code required
No need to know the API — AI handles it for you.
Real-time operations
Direct operations on your NetSendo instance.
Experience NetSendo Live
Don't just take our word for it. Log in to our live demo instance and explore the platform's capabilities firsthand.
This is a public demo instance. Data is reset every 24 hours.
Connect with your tools
NetSendo plays nicely with the tools you already use. Orchestrate workflows with n8n and connect any AI model.
Latest Updates
View all releases- IMAP Bounce Mailbox Monitor:
- Automatic Bounce Detection: New system that monitors a dedicated IMAP mailbox for bounce-back emails (DSN — Delivery Status Notifications) and automatically marks subscribers as bounced. Designed for users sending via custom SMTP providers where webhook-based bounce handling is not available.
- BounceMailboxService: Connects to IMAP mailboxes using webklex/php-imap (pure PHP, no ext-imap required), parses RFC 3464 DSN messages, classifies bounces as hard (5.1.x, 5.2.x, 5.5.x) or soft (4.x.x), and processes them via the shared BounceProcessingService.
- BounceProcessingService: Extracted shared bounce processing logic from BounceController into a reusable service. Handles marking subscribers as bounced (hard bounces or soft bounces exceeding threshold) and dispatching EmailBounced events. Used by webhooks, IMAP scanner, and inline SMTP detection.
- Inline SMTP Error Detection: SendEmailJob now catches synchronous SMTP rejections (5xx hard bounces, 4xx soft bounces) during sending and processes them immediately via BounceProcessingService, without waiting for the IMAP scan.
- Return-Path Header: When bounce monitoring is enabled, outgoing emails automatically include a Return-Path header pointing to the configured bounce mailbox, ensuring DSN replies are routed correctly. Supported in both SmtpProvider and NmiProvider.
- Pixel — Double Page View Counting (WordPress Plugin):
- Removed netsendo_wp_track_page_view() function and its wp_footer hook from the WordPress plugin. The NetSendo Pixel JavaScript already tracks page views automatically on initialization — the redundant PHP hook was causing every visit to be counted twice.
- Pixel — Engagement Events Misreported as Page Views:
- Fixed trackTimeOnPage() sending page_view event type instead of a dedicated engagement event. This was further inflating page view counts with time-on-page/scroll-depth data. Renamed to trackEngagement() and changed event type to engagement.
- Autoresponder Queue — Missing SubscriberSignedUp Events:
- Fixed autoresponder messages not being queued for subscribers added to lists through automations, tracked link clicks, webinar registration, subscriber preferences, CardIntel, form co-registration, resubscribe links, and CSV import. Root cause: these 10 code paths added subscribers to lists without dispatching the SubscriberSignedUp event, which is the sole trigger forCreateAutoresponderQueueEntries listener. All paths now correctly dispatch the event with unique source labels for traceability.
- Brain — Full Automation Management (SegmentationAgent):
- 5 New Executors: create_automation (creates AutomationRule with trigger, actions, conditions, rate limiting), update_automation (modifies any fields), toggle_automation (enable/disable), delete_automation (with system rule protection), list_automations (full list with stats and execution counts).
- Enriched AI Context: Plan prompt now includes all 30+ available trigger events, 18 action types, 15+ condition types, and the user's existing automations — enabling AI to make informed automation decisions.
- Validation: Trigger event validation, empty actions check, system rule deletion protection.
- Brain — A/B Test Management (CampaignAgent):
- 3 New Executors: create_ab_test (creates AbTest + AbTestVariant records with type, sample %, auto-winner, up to 5 variants), check_ab_results (displays per-variant open rate, click rate, CTOR with winner determination), list_ab_tests (lists all tests with status, type, metric, and winner).

