An open API service indexing awesome lists of open source software.

https://github.com/netsendo/netsendo

Self-hosted professional email marketing & automation platform with email, SMS, workflows, CRM, analytics and AI integrations. Built with Laravel, Vue.js and Docker.
https://github.com/netsendo/netsendo

docker docker-compose email-campaigns email-marketing email-marketing-automation email-marketing-campaigns email-marketing-dashboard email-marketing-software marketing marketing-automation marketing-automation-pipeline newsletter newsletter-mail newsletters self-hosted selfhosted sms-marketing workflows

Last synced: 4 months ago
JSON representation

Self-hosted professional email marketing & automation platform with email, SMS, workflows, CRM, analytics and AI integrations. Built with Laravel, Vue.js and Docker.

Awesome Lists containing this project

README

          

![NetSendo Logo](https://gregciupek.com/wp-content/uploads/2025/12/Logo-NetSendo-1700-x-500-px.png)

# NetSendo

**Professional Email Marketing & Automation Platform**

[![Version](https://img.shields.io/badge/version-2.0.0-blue.svg)](https://github.com/NetSendo/NetSendo/releases)
[![PHP](https://img.shields.io/badge/PHP-8.5-purple.svg)](https://php.net)
[![Laravel](https://img.shields.io/badge/Laravel-12-red.svg)](https://laravel.com)
[![Vue.js](https://img.shields.io/badge/Vue.js-3-green.svg)](https://vuejs.org)
[![License](https://img.shields.io/badge/License-Proprietary-orange.svg)](LICENSE)

[๐Ÿ“– Documentation](https://docs.netsendo.com) โ€ข [๐ŸŽ“ Courses](https://netsendo.com/courses) โ€ข [๐Ÿ’ฌ Forum](https://forum.netsendo.com) โ€ข [๐Ÿ› Report Bug](https://support.netsendo.com)

**[๐Ÿ‡บ๐Ÿ‡ธ English](#-about-netsendo)** | [๐Ÿ‡ต๐Ÿ‡ฑ Polski](#-o-netsendo-pl) | [๐Ÿ‡ฉ๐Ÿ‡ช Deutsch](#-รผber-netsendo-de) | [๐Ÿ‡ช๐Ÿ‡ธ Espaรฑol](#-acerca-de-netsendo-es)

---

## ๐Ÿš€ About NetSendo

NetSendo is a modern email marketing and automation platform that enables:

- ๐Ÿ“ง **Email Marketing** - Create and send email campaigns with advanced MJML editor
- ๐ŸŽฅ **Webinars & Auto-Webinars** - Host live sessions or schedule automated evergreen webinars with simulated chat
- ๐Ÿ‘ฅ **Live Visitors** - Real-time visitor tracking and analytics using WebSockets
- ๐Ÿ›๏ธ **E-commerce & Funnels** - Sell digital products via Stripe, Polar, & Shopify with built-in sales funnels
- ๐Ÿค– **AI Suite** - Campaign Auditor, Advisor, and Smart Content Generation (OpenAI, Claude, Gemini)
- ๐Ÿ”Œ **MCP Server** - Model Context Protocol integration for AI assistants (Claude, Cursor, VS Code)
- ๐Ÿ“ฑ **SMS Marketing** - Send SMS messages to your subscribers
- ๐Ÿ”„ **Automations** - Build complex scenarios and workflows
- ๐Ÿ“ฆ **Integrations** - Native support for WordPress, WooCommerce, n8n, and more
- ๐Ÿ“Š **Analytics** - Detailed open, click, and conversion statistics
- ๐ŸŽจ **Templates** - Drag & drop email template builder
- ๐Ÿ‘ฅ **CRM** - Manage subscribers, groups, and tags
- ๐Ÿ”’ **[NMI](docs/NMI.md)** - Professional mail infrastructure with dedicated IPs, IP warming, DKIM, and blacklist monitoring

---

## ๐Ÿ“ธ Dashboard Preview

![NetSendo Dashboard](https://gregciupek.com/wp-content/uploads/2025/12/CleanShot-2025-12-20-at-13.58.34.png)

_Modern, intuitive dashboard with real-time analytics and campaign management_

---

## ๐Ÿ“‹ Requirements

- **Docker Desktop** (recommended) or:
- PHP 8.5+
- MySQL 8.0+
- Redis
- Node.js 25+
- Composer
- **PHP GD Extension** (optional, for automatic color extraction from images)

> [!TIP]
> The PHP GD extension enables automatic color palette extraction from uploaded images in the Media Library. If GD is not installed, image uploads will still work, but color extraction will be skipped.

---

## ๐Ÿณ Installation (Docker)

> [!IMPORTANT] > **Required Configuration Before Starting Docker**
>
> Before running Docker, you MUST configure the following environment variables in `src/.env.docker`:
>
> **1. APP_KEY** (Required - Docker will NOT build without this!):
>
> ```env
> # Find the line: APP_KEY=
> # Replace with (IMPORTANT: must start with base64:):
> APP_KEY=base64:YOUR_32_BYTE_KEY_HERE
> ```
>
> Generate a key using: `openssl rand -base64 32`
>
> **2. DB_PASSWORD** (Required - change from default):
>
> ```env
> DB_PASSWORD=your_secure_password
> ```
>
> **3. AI API Keys** (Optional - for AI features):
>
> ```env
> OPENAI_API_KEY=sk-...
> ANTHROPIC_API_KEY=sk-ant-...
> GOOGLE_AI_API_KEY=...
> ```

---

### ๐Ÿš€ Production Deployment

**Option 1: Quick Install Script (Recommended)**

```bash
curl -fsSL https://raw.githubusercontent.com/NetSendo/NetSendo/main/install.sh | bash
```

To install a specific version:

```bash
VERSION=1.0.0 curl -fsSL https://raw.githubusercontent.com/NetSendo/NetSendo/main/install.sh | bash
```

**Option 2: Manual Production Deployment**

```bash
# Clone repository
git clone https://github.com/NetSendo/NetSendo.git
cd NetSendo

# Create .env file from example
cp .env.example .env
# Edit .env with your production settings

# Start production stack (uses pre-built images)
docker compose up -d

# Or specify a version
NETSENDO_VERSION=1.0.0 docker compose up -d
```

| Service | URL | Description |
| ------------ | --------------------- | ---------------- |
| **NetSendo** | http://localhost:5029 | Main dashboard |
| **Mailpit** | http://localhost:5031 | Test email inbox |
| **MySQL** | localhost:5030 | Database |
| **Reverb** | localhost:8085 | WebSocket Server |

> [!TIP]
> All ports are bound to `127.0.0.1` for security. Use a reverse proxy (nginx, Caddy) for public access.

---

### ๐Ÿ› ๏ธ Development Setup

```bash
git clone https://github.com/NetSendo/NetSendo.git
cd NetSendo

# Start development stack (builds from source)
docker compose -f docker-compose.dev.yml up -d --build
```

On first run, the container will automatically:

- โœ… Install Composer and NPM dependencies
- โœ… Generate application key
- โœ… Run database migrations
- โœ… Build frontend assets

| Service | URL | Description |
| ------------ | --------------------- | ---------------------- |
| **NetSendo** | http://localhost:8080 | Main dashboard |
| **Mailpit** | http://localhost:8025 | Test email inbox |
| **MySQL** | localhost:3306 | Database |
| **Reverb** | localhost:8085 | WebSocket Server |
| **Vite HMR** | http://localhost:5173 | Hot Module Replacement |

---

## ๐Ÿ”‘ Licensing

NetSendo requires an active license to operate.

### License Plans

| Plan | Price | Features |
| ---------- | ------ | -------------------------------------------------------- |
| **SILVER** | Free | All basic features, unlimited contacts |
| **GOLD** | $97/mo | Advanced automations, priority support, API, white-label |

### License Activation

1. Launch the application and go to the main page
2. Register an administrator account
3. On the license page, select SILVER (free) or GOLD plan
4. Enter your email - the license will be automatically activated

---

## ๐Ÿ› ๏ธ Docker Commands

### Production

```bash
# Start production stack
docker compose up -d

# Stop
docker compose down

# View logs
docker compose logs -f app

# Shell access
docker exec -it netsendo-app bash

# Artisan commands
docker exec netsendo-app php artisan
```

### Development

```bash
# Start development stack
docker compose -f docker-compose.dev.yml up -d --build

# Stop
docker compose -f docker-compose.dev.yml down

# View logs
docker compose -f docker-compose.dev.yml logs -f app

# Shell access
docker exec -it netsendo-app bash

# Artisan commands
docker exec netsendo-app php artisan

# Composer
docker exec netsendo-app composer

# NPM
docker exec netsendo-app npm
```

---

## ๐Ÿ“ Project Structure

```
NetSendo/
โ”œโ”€โ”€ docker/ # Docker configuration
โ”‚ โ”œโ”€โ”€ nginx/ # Nginx config
โ”‚ โ””โ”€โ”€ php/ # PHP Dockerfile + entrypoint
โ”œโ”€โ”€ src/ # Laravel source code
โ”‚ โ”œโ”€โ”€ app/ # Application logic
โ”‚ โ”œโ”€โ”€ config/ # Configuration
โ”‚ โ”œโ”€โ”€ database/ # Migrations and seeders
โ”‚ โ”œโ”€โ”€ resources/ # Frontend (Vue.js, CSS)
โ”‚ โ”œโ”€โ”€ routes/ # Routing
โ”‚ โ””โ”€โ”€ public/ # Public files
โ”œโ”€โ”€ backups/ # Database backups
โ”‚ โ””โ”€โ”€ db/ # MySQL backup files
โ”œโ”€โ”€ docker-compose.yml # Production configuration (main)
โ”œโ”€โ”€ docker-compose.dev.yml # Development configuration
โ””โ”€โ”€ README.md # This file
```

---

## ๐Ÿ”ง Configuration

Configuration is stored in `src/.env` (automatically created from `src/.env.docker`).

> [!CAUTION] > **You MUST configure these variables before building Docker!**

### Required Environment Variables

```env
# REQUIRED: Application Key (must start with base64:)
# Generate with: openssl rand -base64 32
APP_KEY=base64:YOUR_GENERATED_KEY_HERE

APP_URL=http://localhost:8080
APP_LOCALE=en

# Database (Docker) - CHANGE THE PASSWORD!
DB_HOST=db
DB_DATABASE=netsendo
DB_USERNAME=netsendo
DB_PASSWORD=your_secure_password_here

# Redis
REDIS_HOST=redis

# Mail (Mailpit in Docker)
MAIL_HOST=mailpit
MAIL_PORT=1025
```

### Optional: AI Integration Keys

```env
# OpenAI (for GPT features)
OPENAI_API_KEY=sk-...

# Anthropic Claude
ANTHROPIC_API_KEY=sk-ant-...

# Google AI (Gemini)
GOOGLE_AI_API_KEY=...
```

### WebSocket Configuration (Reverb)

> [!IMPORTANT] > **WebSocket server is required** for real-time features like Live Visitors, notifications, and real-time analytics.

NetSendo uses Laravel Reverb as a WebSocket server. The configuration is already included in `docker-compose.yml` and `docker-compose.dev.yml`.

**Required environment variables:**

```env
# Enable broadcasting via Reverb
BROADCAST_CONNECTION=reverb

# Backend configuration (for PHP/Laravel)
REVERB_APP_ID=netsendo
REVERB_APP_KEY=netsendo-reverb-key
REVERB_APP_SECRET=netsendo-reverb-secret
REVERB_HOST=reverb # Docker service name
REVERB_PORT=8085
REVERB_SCHEME=http

# Frontend configuration (for browser)
VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"
VITE_REVERB_HOST=localhost # Or your domain for production
VITE_REVERB_PORT=8085
VITE_REVERB_SCHEME=http
```

**Key points:**

- `REVERB_HOST=reverb` - for backend (Docker internal network)
- `VITE_REVERB_HOST=localhost` - for browser (external access)
- Port `8085` is exposed by the `reverb` container
- After changing `VITE_*` variables, rebuild frontend: `npm run build`

### Production Configuration

> [!TIP] > **Auto-detected settings**: NetSendo automatically configures these from `APP_URL`:
>
> - `SESSION_DOMAIN` - extracted from APP_URL hostname
> - `SESSION_SECURE_COOKIE` - set to `true` if APP_URL uses `https://`

```env
# === REQUIRED ===
APP_URL=https://your-domain.com # Your production URL (with https://)
APP_KEY=base64:... # Generate with: openssl rand -base64 32
APP_ENV=production
APP_DEBUG=false

# Database
DB_CONNECTION=mysql
DB_HOST=db
DB_DATABASE=netsendo_prod
DB_USERNAME=netsendo_user
DB_PASSWORD=your_secure_password # CHANGE THIS!

# Redis (recommended for sessions/cache)
REDIS_HOST=redis
SESSION_DRIVER=redis
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis

# Mail configuration
MAIL_MAILER=smtp
MAIL_HOST=your-smtp-server.com
MAIL_PORT=587
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@your-domain.com
MAIL_FROM_NAME="${APP_NAME}"

# === OPTIONAL OVERRIDES ===
# These are auto-detected from APP_URL, only set if you need custom values:

# SESSION_DOMAIN=.your-domain.com # Auto-detected from APP_URL
# SESSION_SECURE_COOKIE=true # Auto-detected (true for https://)
# TRUSTED_PROXIES=* # Set if behind load balancer/CDN
```

> [!IMPORTANT] > **Reverse Proxy Configuration**: If using nginx/Caddy as reverse proxy, ensure your proxy passes the correct headers:
>
> ```nginx
> proxy_set_header X-Forwarded-Proto $scheme;
> proxy_set_header X-Forwarded-Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> ```

---

## ๐ŸŒ Internationalization

NetSendo supports the following languages:

- ๐Ÿ‡บ๐Ÿ‡ธ English (default)
- ๐Ÿ‡ต๐Ÿ‡ฑ Polski
- ๐Ÿ‡ฉ๐Ÿ‡ช Deutsch
- ๐Ÿ‡ช๐Ÿ‡ธ Espaรฑol

Language switcher is available in the application header.

---

## ๐Ÿ“ˆ Updates

Check for available updates:

1. In the app: **Settings โ†’ Updates**
2. On GitHub: [Releases](https://github.com/NetSendo/NetSendo/releases)

### Update Process (Standard Docker Workflow)

```bash
# Stop containers
docker compose down

# Pull latest images
docker compose pull

# Start with new version
docker compose up -d
```

> [!TIP]
> That's it! No rebuilding or cache clearing required. Works just like n8n and other Docker apps.

**Update to specific version:**

```bash
NETSENDO_VERSION=1.1.0 docker compose up -d
```

## ๐Ÿ“– For detailed instructions, see [DOCKER_INSTALL.md](DOCKER_INSTALL.md)

## ๐Ÿ”ง Troubleshooting

### Container Won't Start

```bash
# Check logs
docker compose logs app

# Verify database is healthy
docker compose exec db mysqladmin ping -h localhost
```

### Clear Caches

```bash
docker compose exec app php artisan cache:clear
docker compose exec app php artisan config:clear
docker compose exec app php artisan view:clear
```

### Browser Cache Issues

If changes don't appear after update:

- Hard refresh: `Ctrl+Shift+R` (Windows/Linux) or `Cmd+Shift+R` (Mac)
- Clear browser cache or use incognito mode

### WebSocket Connection Failed

If you see errors like:

```
WebSocket connection to 'ws://localhost:8080/app/...' failed
```

**Cause:** Reverb is not configured or not running.

**Solution:**

1. **Check Reverb configuration in `.env`:**

```env
BROADCAST_CONNECTION=reverb
REVERB_PORT=8085
VITE_REVERB_PORT=8085
```

2. **Verify Reverb container is running:**

```bash
docker compose ps
# Should show netsendo-reverb with status "Up"
```

3. **Check Reverb logs:**

```bash
docker compose logs reverb
# Should show: "Starting server on 0.0.0.0:8085"
```

4. **Restart Reverb and rebuild frontend:**

```bash
docker compose restart reverb
docker compose exec app npm run build
```

5. **Verify port 8085 is accessible:**
```bash
curl http://localhost:8085
# Should return Reverb response
```

๐Ÿ“– For more troubleshooting, see [DOCKER_INSTALL.md](DOCKER_INSTALL.md#-troubleshooting)

---

## ๐Ÿค Support

- ๐Ÿ“– **Documentation**: https://docs.netsendo.com
- ๐Ÿ’ฌ **Forum**: https://forum.netsendo.com
- ๐ŸŽ“ **Courses**: https://netsendo.com/courses
- ๐Ÿ› **Report Bug**: https://support.netsendo.com
- ๐Ÿ“ง **Email**: support@netsendo.com

---

## ๐Ÿ“„ License

NetSendo is proprietary software. See [LICENSE](LICENSE) for details.

---

## ๐Ÿ‡ต๐Ÿ‡ฑ O NetSendo (PL)

NetSendo to nowoczesna platforma e-mail marketingu i automatyzacji. Umoลผliwia tworzenie kampanii emailowych, SMS, automatyzacji sprzedaลผowych i szczegรณล‚owej analityki.

### Instalacja

```bash
git clone https://github.com/NetSendo/NetSendo.git
cd NetSendo
docker compose up -d --build
```

Aplikacja dostฤ™pna pod: http://localhost:8080

## ๐Ÿ‡ฉ๐Ÿ‡ช รœber NetSendo (DE)

NetSendo ist eine moderne E-Mail-Marketing- und Automatisierungsplattform. Erstellen Sie E-Mail-Kampagnen, SMS, Verkaufsautomatisierungen und detaillierte Analysen.

### Installation

```bash
git clone https://github.com/NetSendo/NetSendo.git
cd NetSendo
docker compose up -d --build
```

Anwendung verfรผgbar unter: http://localhost:8080

## ๐Ÿ‡ช๐Ÿ‡ธ Acerca de NetSendo (ES)

NetSendo es una plataforma moderna de email marketing y automatizaciรณn. Cree campaรฑas de correo electrรณnico, SMS, automatizaciones de ventas y anรกlisis detallados.

### Instalaciรณn

```bash
git clone https://github.com/NetSendo/NetSendo.git
cd NetSendo
docker compose up -d --build
```

Aplicaciรณn disponible en: http://localhost:8080

---

**Made with โค๏ธ by [NetSendo Team](https://netsendo.com)**

![NetSendo Icon](https://gregciupek.com/wp-content/uploads/2025/12/logo-netsendo-kwadrat-ciemne.png)