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- Mailbox Reputation — False Blacklist Positives:
- Fixed all mailboxes being incorrectly flagged as "Na czarnej liście!" (Blacklisted). Root cause: Spamhaus, SURBL, and URIBL return special error IPs (e.g., 127.255.255.254) when queried from public/shared DNS resolvers (Google DNS, Cloudflare). The checkDomainDnsbl() method treated any DNS response as "listed". Now validates response IPs and filters out known error/block/test ranges before determining listing status.
- Migration resets all existing reputation data so the corrected logic can re-evaluate on next check.
- Mailbox Reputation — "Error checking reputation" Button Failure:
- Fixed the "Check Reputation" button in Mailbox settings returning an error. Root cause: frontend called route("mailboxes.check-reputation") but the actual route name is settings.mailboxes.check-reputation (due to the Route::prefix('settings/mailboxes')->name('settings.mailboxes.') group). Updated Mailboxes/Index.vue to use the correct route name.
- Brain — Weekly Digest AI Report Crash (AiService::chat() undefined):
- 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.

