{"id":50355735,"url":"https://github.com/mailpace/vibe-smtp","last_synced_at":"2026-05-29T22:30:49.114Z","repository":{"id":354263194,"uuid":"1021461192","full_name":"mailpace/vibe-smtp","owner":"mailpace","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-27T19:57:44.000Z","size":186,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-27T21:26:00.512Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mailpace.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-17T12:35:36.000Z","updated_at":"2025-07-22T21:29:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mailpace/vibe-smtp","commit_stats":null,"previous_names":["mailpace/vibe-smtp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/mailpace/vibe-smtp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpace%2Fvibe-smtp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpace%2Fvibe-smtp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpace%2Fvibe-smtp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpace%2Fvibe-smtp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mailpace","download_url":"https://codeload.github.com/mailpace/vibe-smtp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailpace%2Fvibe-smtp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33673627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-29T22:30:48.400Z","updated_at":"2026-05-29T22:30:49.105Z","avatar_url":"https://github.com/mailpace.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://docs.mailpace.com/img/logo.png\" alt=\"MailPace Logo\" width=\"300\" /\u003e\n  \n  # Vibe Gateway - SMTP to MailPace Bridge\n  \n  ### A high-performance Rust SMTP server that seamlessly bridges email delivery to the MailPace API\n  \n  [![CI](https://github.com/mailpace/vibe-smtp/actions/workflows/ci.yml/badge.svg)](https://github.com/mailpace/vibe-smtp/actions/workflows/ci.yml)\n  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n  [![Rust](https://img.shields.io/badge/rust-1.88+-orange.svg)](https://www.rust-lang.org)\n  [![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://hub.docker.com)\n  \n  [**Website**](https://mailpace.com) • [**Documentation**](https://docs.mailpace.com) • [**API Reference**](https://docs.mailpace.com/reference/send) • [**Support**](mailto:support@mailpace.com)\n\u003c/div\u003e\n\n---\n\n## Overview\n\nA production-ready Rust SMTP server that accepts emails and forwards them to the MailPace API with enterprise-grade reliability and performance.\n\n## 📑 Table of Contents\n\n- [Key Features](#-key-features)\n- [Quick Start](#-quick-start)\n- [Configuration](#-configuration)\n- [Authentication](#-authentication)\n- [SMTP Client Configuration](#-smtp-client-configuration)\n- [Usage](#usage)\n- [MailPace Features](#mailpace-features)\n- [Attachment Support](#attachment-support)\n- [HTML Compression](#html-compression)\n- [Error Handling](#error-handling)\n- [Development](#-development)\n- [Testing](#-testing)\n- [License](#-license)\n\n## ✨ Key Features\n\n- 🚀 **High-Performance SMTP Server** - Built with Rust for maximum throughput and reliability\n- 🔐 **Enterprise Authentication** - Full SMTP authentication with MailPace API token integration\n- 📎 **Smart Attachment Handling** - Automatic MIME parsing with configurable size limits\n- 🗜️ **HTML Compression** - Intelligent compression optimized for email clients\n- 🔒 **TLS/STARTTLS Support** - Secure email transmission with modern encryption\n- 📊 **Advanced Monitoring** - Comprehensive logging and error reporting\n- 🏷️ **MailPace Integration** - Native support for tags, list-unsubscribe, and custom headers\n- ⚡ **Zero-Downtime Deployment** - Docker-ready with health checks and graceful shutdown\n\n## 🚀 Quick Start\n\n### Prerequisites\n- [Rust 1.88+](https://rustup.rs/)\n- [MailPace Account](https://mailpace.com/signup) with API token\n\n### Installation \u0026 Setup\n\n1. **Clone the repository**:\n   ```bash\n   git clone https://github.com/mailpace/vibe-smtp.git\n   cd vibe-smtp\n   ```\n\n2. **Build and run**:\n   ```bash\n   cargo run\n   ```\n\n3. **Test the connection**:\n   ```bash\n   python3 test_smtp.py\n   ```\n\n### Docker Deployment\n\nFor comprehensive Docker setup with multi-port support, see **[DOCKER.md](DOCKER.md)**.\n\n#### Quick Start (Multi-Port Configuration)\n```bash\n# Clone and build\ngit clone https://github.com/mailpace/vibe-smtp.git\ncd vibe-smtp\n\n# Run with all SMTP ports using the helper script\n./docker-run.sh multi-port --token your_api_token\n\n# Or use Docker Compose\ndocker-compose up -d\n```\n\n#### Port Configuration\nThe Docker setup supports industry-standard SMTP ports:\n\n| Port | Protocol | Description | TLS Support |\n|------|----------|-------------|-------------|\n| **25** | SMTP | Standard mail transfer | STARTTLS optional |\n| **587** | Submission | Message submission | STARTTLS optional |\n| **2525** | Alternative | Development/testing | STARTTLS optional |\n| **465** | SMTPS | SMTP over SSL | Implicit TLS (no STARTTLS) |\n\n#### Docker Run Options\n\n**Option 1: Helper Script (Recommended)**\n```bash\n# Multi-port mode with all SMTP ports\n./docker-run.sh multi-port --token your_api_token\n\n# Single-port mode (port 2525 only)\n./docker-run.sh single-port --token your_api_token\n\n# Development mode with debug logging\n./docker-run.sh multi-port --dev --token your_api_token\n```\n\n**Option 2: Docker Compose**\n```bash\n# Copy environment file and edit with your API token\ncp .env.example .env\n# Edit .env and set MAILPACE_API_TOKEN=your_token\n\n# Start all services\ndocker-compose up -d\n\n# View logs\ndocker-compose logs -f vibe-gateway\n```\n\n**Option 3: Direct Docker Commands**\n```bash\n# Build the image\ndocker build -t vibe-gateway .\n\n# Run multi-port mode\ndocker run -p 25:25 -p 587:587 -p 2525:2525 -p 465:465 \\\n  -e MAILPACE_API_TOKEN=your_token \\\n  vibe-gateway --docker-multi-port\n\n# Run single-port mode  \ndocker run -p 2525:2525 \\\n  -e MAILPACE_API_TOKEN=your_token \\\n  vibe-gateway --listen 0.0.0.0:2525 --enable-tls\n```\n\n#### TLS Certificate Management\n\nThe Docker image includes test certificates for development. For production:\n\n**Option 1: Mount your own certificates**\n```bash\ndocker run -p 25:25 -p 587:587 -p 2525:2525 -p 465:465 \\\n  -v /path/to/your/cert.pem:/app/test_cert.pem:ro \\\n  -v /path/to/your/key.pem:/app/test_key.pem:ro \\\n  -e MAILPACE_API_TOKEN=your_token \\\n  vibe-gateway --docker-multi-port\n```\n\n**Option 2: Use Docker Compose with custom certificates**\n```yaml\n# docker-compose.override.yml\nservices:\n  vibe-gateway:\n    volumes:\n      - ./your_cert.pem:/app/test_cert.pem:ro\n      - ./your_key.pem:/app/test_key.pem:ro\n```\n\n#### Production Deployment Considerations\n\n1. **Security**: Use proper TLS certificates in production\n2. **Firewall**: Only expose necessary ports (typically 587 and 465)\n3. **Monitoring**: Use the built-in health check endpoint\n4. **Backup**: Ensure your MailPace API token is securely stored\n5. **Scaling**: Run multiple containers behind a load balancer if needed\n\n#### Health Checks\n\nThe Docker image includes health checks that verify SMTP connectivity:\n```bash\n# Check container health\ndocker inspect --format='{{.State.Health.Status}}' container_name\n\n# Manual health check\ndocker exec container_name timeout 5 bash -c '\u003c/dev/tcp/localhost/2525'\n```\n\n## 🔧 Configuration\n\nThe server supports the following configuration options:\n\n- `--listen` or `-l`: SMTP server listen address (default: `127.0.0.1:2525`)\n- `--mailpace-endpoint`: MailPace API endpoint (default: `https://app.mailpace.com/api/v1/send`)\n- `--default-mailpace-token`: Default MailPace API token (optional, can also be set via `MAILPACE_API_TOKEN` environment variable)\n- `--enable-tls`: Enable TLS/STARTTLS support\n- `--enable-attachments`: Enable attachment parsing and forwarding\n- `--max-attachment-size`: Maximum size per attachment in bytes (default: 10MB)\n- `--max-attachments`: Maximum number of attachments per email (default: 10)\n- `--enable-html-compression`: Enable HTML compression for email bodies\n- `--max-connections`: Maximum concurrent SMTP sessions (default: `1000`)\n- `--max-command-length`: Maximum SMTP command length in bytes (default: `2048`)\n- `--max-message-size`: Maximum SMTP message size in bytes (default: `26214400`)\n- `--max-recipients`: Maximum recipients per message (default: `100`)\n- `--read-timeout-secs`: Per-command socket read timeout in seconds (default: `30`)\n- `--write-timeout-secs`: Socket write timeout in seconds (default: `30`)\n- `--max-session-duration-secs`: Maximum SMTP session duration in seconds (default: `300`)\n- `--mailpace-timeout-secs`: MailPace API timeout in seconds (default: `15`)\n- `--mailpace-retries`: Retries for transient MailPace API failures (default: `2`)\n- `--mailpace-retry-backoff-ms`: Initial MailPace retry backoff in milliseconds (default: `250`)\n- `--debug` or `-d`: Enable debug logging\n\n## 🔐 Authentication\n\nVibe Gateway follows the MailPace SMTP authentication model for seamless integration:\n\n### Primary Authentication Method\nUsers authenticate using their MailPace API token as both username and password:\n- **Username**: Your MailPace API token  \n- **Password**: Your MailPace API token (same as username)\n\n### Fallback Option\nConfigure a default token for clients that can't provide authentication:\n- Set via `--default-mailpace-token` flag\n- Or use `MAILPACE_API_TOKEN` environment variable\n\n### Finding Your API Token\nAPI tokens are available in your [MailPace Dashboard](https://app.mailpace.com) under:\n**Domain Settings → API Tokens**\n\n\u003e 💡 **Note**: Each domain has a unique API token for security and isolation.\n\n## Quick Start\n\n1. **Option 1: Users authenticate with their tokens** (recommended):\n   ```bash\n   cargo run\n   ```\n\n2. **Option 2: Use a default token**:\n   ```bash\n   export MAILPACE_API_TOKEN=your_default_token_here\n   cargo run\n   ```\n\n3. Test with the included Python script:\n   ```bash\n   python3 test_smtp.py\n   ```\n\n## 📧 SMTP Client Configuration\n\nConfigure your email client or application with these settings:\n\n### Standard Configuration\n\n| Setting | Value | Notes |\n|---------|-------|-------|\n| **SMTP Server** | `localhost` | Or your server's IP address |\n| **SMTP Port** | `25`, `587`, `2525`, or `465` | See port details below |\n| **Encryption** | Varies by port | See TLS configuration below |\n| **Authentication** | PLAIN | `AUTH PLAIN` is supported |\n| **Username** | Your MailPace API token | Get from MailPace Dashboard |\n| **Password** | Your MailPace API token | Same as username |\n\n### Port-Specific Configuration\n\n| Port | Purpose | TLS Mode | Encryption | Typical Use |\n|------|---------|----------|------------|-------------|\n| **25** | Standard SMTP | STARTTLS optional | None/STARTTLS | Mail transfer agents |\n| **587** | Message Submission | STARTTLS optional | None/STARTTLS | Email clients (recommended) |\n| **2525** | Alternative SMTP | STARTTLS optional | None/STARTTLS | Development/testing |\n| **465** | SMTP over SSL | Implicit TLS | SSL/TLS required | Legacy email clients |\n\n\u003e 💡 **Recommendation**: Use port **587** for email clients as it's the modern standard for message submission.\n\n### Popular Email Clients\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePostfix Configuration\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# /etc/postfix/main.cf\n# Use port 587 for message submission (recommended)\nrelayhost = [localhost]:587\nsmtp_sasl_auth_enable = yes\nsmtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd\nsmtp_sasl_security_options = noanonymous\nsmtp_tls_security_level = may\n\n# /etc/postfix/sasl_passwd\n[localhost]:587 your_api_token:your_api_token\n\n# Alternative: Use port 25 for standard SMTP\n# relayhost = [localhost]:25\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eNodemailer (Node.js)\u003c/strong\u003e\u003c/summary\u003e\n\n```javascript\n// Recommended: Port 587 with STARTTLS\nconst transporter = nodemailer.createTransporter({\n  host: 'localhost',\n  port: 587,\n  secure: false, // true for 465, false for other ports\n  auth: {\n    user: 'your_api_token',\n    pass: 'your_api_token'\n  }\n});\n\n// Alternative: Port 465 with implicit TLS\nconst secureTransporter = nodemailer.createTransporter({\n  host: 'localhost',\n  port: 465,\n  secure: true, // implicit TLS\n  auth: {\n    user: 'your_api_token',\n    pass: 'your_api_token'\n  }\n});\n```\n\u003c/details\u003e\n\n## Usage\n\n1. **Primary usage** (users provide their own API tokens):\n   ```bash\n   cargo run\n   ```\n\n2. **With default token fallback** (optional):\n   ```bash\n   export MAILPACE_API_TOKEN=your_default_token_here\n   cargo run\n   ```\n\n3. **With custom settings**:\n   ```bash\n   cargo run -- --listen 0.0.0.0:587 --debug\n   ```\n\n## How It Works\n\nWhen a user connects via SMTP:\n1. They authenticate using their MailPace API token as both username and password\n2. The server extracts this token from the SMTP AUTH command\n3. The server uses this token to authenticate with the MailPace API\n4. If no token is provided via SMTP AUTH, the server falls back to a default token (if configured)\n\n## MailPace Features\n\nThe server supports the following MailPace-specific features:\n\n### Tags\nAdd tags to emails by including the `X-MailPace-Tags` header:\n```\nX-MailPace-Tags: tag1, tag2, tag3\n```\n\n### List-Unsubscribe\nAdd unsubscribe links by including the `X-List-Unsubscribe` header:\n```\nX-List-Unsubscribe: \u003chttp://example.com/unsubscribe\u003e, \u003cmailto:unsubscribe@example.com\u003e\n```\n\n### Attachments\nStandard MIME attachments are automatically converted to MailPace format with base64 encoding.\n\n## Attachment Support\n\nThe server supports email attachments when enabled with the `--enable-attachments` flag:\n\n```bash\ncargo run -- --enable-attachments\n```\n\n### Attachment Configuration\n\n- `--enable-attachments`: Enable attachment parsing and forwarding\n- `--max-attachment-size`: Maximum size per attachment in bytes (default: 10MB)\n- `--max-attachments`: Maximum number of attachments per email (default: 10)\n\n### Attachment Handling\n\nWhen attachment support is enabled, the server:\n- Parses MIME multipart messages\n- Extracts attachments with their filenames and content types\n- Converts attachments to base64 format for MailPace API\n- Validates attachment sizes and counts against configured limits\n- Logs attachment processing for debugging\n\n### Example Usage\n\n```bash\n# Enable attachments with custom limits\ncargo run -- --enable-attachments --max-attachment-size 5242880 --max-attachments 5\n\n# Test with the attachment test script\npython3 test_attachment.py\n```\n\n## HTML Compression\n\nThe server supports HTML compression for email bodies to reduce bandwidth and improve delivery performance:\n\n```bash\ncargo run -- --enable-html-compression\n```\n\n### HTML Compression Features\n\n- **Automatic Detection**: Only compresses content that appears to be HTML\n- **Safe Compression**: Preserves email client compatibility by keeping essential tags\n- **Comment Removal**: Strips HTML comments to reduce size\n- **Whitespace Optimization**: Removes unnecessary whitespace while preserving content\n- **CSS/JS Minification**: Minifies inline CSS and JavaScript\n- **Fallback Handling**: Uses original content if compression fails\n\n### Compression Configuration\n\n- `--enable-html-compression`: Enable HTML compression for email bodies\n\n### How It Works\n\nWhen HTML compression is enabled, the server:\n1. Detects HTML content using heuristics (looks for common HTML tags)\n2. Applies safe compression settings optimized for email clients\n3. Removes comments and unnecessary whitespace\n4. Minifies inline CSS and JavaScript\n5. Logs compression statistics for monitoring\n6. Falls back to original content if compression fails\n\n### Example Usage\n\n```bash\n# Enable both attachments and HTML compression\ncargo run -- --enable-attachments --enable-html-compression\n\n# Or with TLS support\ncargo run -- --enable-tls --enable-html-compression\n```\n\n### Attachment Test\n\nThe included `test_attachment.py` script demonstrates sending an email with an attachment:\n\n```bash\npython3 test_attachment.py\n```\n\nThis script creates a test email with:\n- Plain text body\n- A sample text file attachment\n- Proper MIME encoding\n\n## Error Handling\n\nThe server provides detailed error messages back to SMTP clients:\n- Authentication errors\n- API token validation\n- MailPace API errors\n- Email parsing errors\n\n## 🛠️ Development\n\n### Prerequisites\n- [Rust 1.88+](https://rustup.rs/) with Cargo\n- [Git](https://git-scm.com/)\n- [Docker](https://docker.com/) (optional)\n\n### Local Development Setup\n\n1. **Clone and setup**:\n   ```bash\n   git clone https://github.com/mailpace/vibe-smtp.git\n   cd vibe-smtp\n   ```\n\n2. **Build and run**:\n   ```bash\n   cargo build\n   cargo run\n   ```\n\n3. **Development with auto-reload**:\n   ```bash\n   cargo install cargo-watch\n   cargo watch -x run\n   ```\n\n4. **Debug mode with detailed logging**:\n   ```bash\n   cargo run -- --debug\n   ```\n\n### 🏗️ Project Structure\n\n```\nsrc/\n├── main.rs          # Application entry point\n├── lib.rs           # Library exports\n├── cli.rs           # Command-line interface\n├── smtp.rs          # SMTP server implementation\n├── mailpace.rs      # MailPace API integration\n├── connection.rs    # Connection handling\n├── compression.rs   # HTML compression\n├── mime.rs          # MIME parsing\n└── tls.rs           # TLS/encryption support\n```\n\n### 🧪 Code Quality\n\n```bash\n# Format code\ncargo fmt\n\n# Lint code\ncargo clippy\n\n# Security audit\ncargo audit\n\n# Documentation\ncargo doc --open\n```\n\n### 📦 Key Dependencies\n\n| Crate | Purpose | Version |\n|-------|---------|---------|\n| [`tokio`](https://tokio.rs/) | Async runtime and networking | Latest |\n| [`reqwest`](https://docs.rs/reqwest/) | HTTP client for MailPace API | Latest |\n| [`mail-parser`](https://docs.rs/mail-parser/) | RFC-compliant email parsing | Latest |\n| [`serde`](https://serde.rs/) | JSON serialization framework | Latest |\n| [`base64`](https://docs.rs/base64/) | Attachment encoding | Latest |\n| [`tracing`](https://docs.rs/tracing/) | Structured logging | Latest |\n| [`clap`](https://docs.rs/clap/) | Command-line argument parsing | Latest |\n\n### 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## 📋 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \n## About MailPace\n\n**Vibe Gateway** is proudly developed by [MailPace](https://mailpace.com) - the developer-friendly email delivery service.\n\n[![MailPace](https://img.shields.io/badge/Powered%20by-MailPace-blue?style=for-the-badge)](https://mailpace.com)\n\n### Why Choose MailPace?\n\n- 🚀 **99.9% Uptime SLA** - Enterprise-grade reliability\n- 💰 **Transparent Pricing** - No hidden fees or overages  \n- 🛡️ **Privacy-First** - GDPR compliant with EU data residency\n- 📊 **Real-time Analytics** - Advanced delivery insights\n- 🤝 **Developer-Friendly** - Comprehensive APIs and documentation\n\n### Connect With Us\n\n[🌐 Website](https://mailpace.com) • [📚 Documentation](https://docs.mailpace.com) • [💬 Discord](https://discord.gg/mailpace) • [🐦 Twitter](https://twitter.com/mailpace) • [📧 Support](mailto:support@mailpace.com)\n\n---\n\n**Built with ❤️ by the MailPace team**\n\n\u003c/div\u003e\n\n## 🧪 Testing\n\n[![Test Coverage](https://img.shields.io/badge/coverage-95%25-brightgreen.svg)](https://github.com/mailpace/vibe-smtp/actions)\n[![Integration Tests](https://img.shields.io/badge/integration-passing-green.svg)](https://github.com/mailpace/vibe-smtp/actions)\n[![Performance Tests](https://img.shields.io/badge/performance-optimized-blue.svg)](https://github.com/mailpace/vibe-smtp/actions)\n\nThis project includes a comprehensive test suite to ensure reliability and performance:\n\n### 🎯 Test Suite Overview\n- **Integration Tests**: End-to-end SMTP functionality with mock MailPace API\n- **Unit Tests**: Individual component testing with 95%+ coverage\n- **Performance Tests**: Load testing and throughput benchmarking  \n- **Security Tests**: Authentication and input validation\n- **CI/CD Pipeline**: Automated testing on every commit\n\n### 🏃‍♂️ Running Tests\n\n#### Quick Start\n```bash\n# Run all tests with coverage\n./test.sh\n\n# Run specific test suites  \n./test.sh integration    # Integration tests only\n./test.sh unit          # Unit tests only\n./test.sh performance   # Performance tests only\n./test.sh coverage      # Generate coverage report\n```\n\n#### Manual Test Commands\n```bash\n# All tests\ncargo test\n\n# Integration tests with mock MailPace API\ncargo test --test integration_tests\n\n# Unit tests for individual components  \ncargo test --test mailpace_tests\n\n# Performance and load tests\ncargo test --test performance_tests --release\n```\n\n### 📊 Test Coverage\n- **SMTP Protocol**: Command handling, authentication, data transfer\n- **MailPace Integration**: API calls, error handling, payload formatting\n- **Email Processing**: Attachments, HTML/text content, headers\n- **Performance**: Concurrent connections, throughput, resource usage\n- **Security**: Authentication, input validation, error handling\n\n### 🔄 Continuous Integration\nThe project uses GitHub Actions for automated testing:\n- ✅ **Code Quality**: Formatting, linting, and security audits\n- ✅ **Cross-Platform**: Testing on Linux, macOS, and Windows\n- ✅ **Performance**: Automated benchmarking and regression detection\n- ✅ **Security**: Dependency vulnerability scanning\n- ✅ **Docker**: Container build verification and security scanning\n\nFor detailed testing documentation, see [TESTING.md](TESTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmailpace%2Fvibe-smtp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmailpace%2Fvibe-smtp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmailpace%2Fvibe-smtp/lists"}