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- Automations — Modal Buttons Hidden Behind Backdrop Overlay:
- Fixed Duplicate, Delete, and Restore Defaults confirmation modals on the /automations page having their buttons unclickable due to the backdrop overlay rendering on top of the modal content. Same root cause as the global Modal.vue fix in v2.0.9 — the inline modals in Automations/Index.vue were missing relative z-[51] on the modal content container, causing the fixed inset-0 bg-gray-500 bg-opacity-75 backdrop to cover the buttons. Added relative z-[51] to all three modal content containers.
- Template Builder / Editor — Relative Image URLs in Emails (GitHub #6):
- Fixed uploaded images in the email editor ("Wgraj obraz" / "Click to upload image") being saved with relative paths (/storage/templates/images/...) instead of absolute URLs. Since email clients cannot resolve relative paths, images appeared broken in received emails. Root cause: TemplateBuilderController::uploadImage() returned a plain relative path without prepending APP_URL. Now uses config('app.url') to generate absolute URLs (e.g., https://yourdomain.com/storage/templates/images/xyz.png). Images uploaded via the Media Library were not affected.
- Dark Mode — Stats Page Month/Year Selector Invisible Text (GitHub #7):
- Fixed month and year <select> dropdowns on the Global Stats page (/settings/stats) having invisible text in Dark Mode. Root cause: the selects had no explicit dark:text-* class, so the text color defaulted to a dark value that was invisible against the dark background (dark:bg-slate-800). Added text-slate-900 dark:text-white to both selects.
- Modal Overlay — Content Hidden Behind Backdrop:
- Fixed all modal dialogs (Delete, Copy, and others) having their content hidden behind the semi-transparent backdrop overlay. Root cause: the modal content container in Modal.vue had default static positioning, causing the absolute inset-0 backdrop (bg-gray-500 opacity-75) to render on top of it. Added relative z-[51] to the modal content container to create a proper stacking context and ensure the modal body always renders above the backdrop.
- Mailing Lists — Grid View Action Buttons Unresponsive:
- Fixed all action buttons (Subscribers, Create Message, Edit, Clone, Delete) on mailing list cards being unclickable. Root cause: the list name <Link> contained a <span class="absolute inset-0"> overlay that covered the entire card (which has position: relative), intercepting all click events and redirecting to the edit page. Added relative z-10 to the action buttons container to elevate them above the overlay.

