Files
2026-06-09 18:40:21 +02:00

5.7 KiB


title: Hyvor Relay created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, development, email, smtp, transactional] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Development, https://github.com/hyvor/relay]

💻 Hyvor Relay

Service de mailing transactionnel open source — envoyez vos emails applicatifs (magic links, receipts, notifications) via SMTP ou API HTTP, en self-hosted, comme alternative à Postmark, SendGrid et Amazon SES.

📋 Informations Générales

Champ Valeur
Site web relay.hyvor.com
GitHub hyvor/relay
License AGPL-3.0
Langage PHP (Laravel)
Étoiles GitHub 623
Catégorie Development, Email Transactionnel
Référence selfh.st Development

📝 Description

Hyvor Relay est un service de mailing transactionnel self-hosted qui permet d'envoyer des emails applicatifs (confirmations, magic links, notifications, receipts, OTP) via SMTP (port 1025) ou API HTTP REST. C'est la réponse open source à Postmark, SendGrid et Amazon SES : contrôle total des données, de la délivrabilité et des métriques, sans SaaS tiers.

Développé par Hyvor (éditeur de Hyvor Talk, Hyvor Blogs), Relay mise sur la simplicité radicale : un binaire PHP, une interface web claire, le strict nécessaire (pas de marketing automation ni de templates drag&drop). Il fait une seule chose, bien : router vos emails vers un provider sortant (SES, Postmark, Mailgun, SMTP générique) avec fallback automatique.

Pour les indie hackers et SaaS self-hosted, Relay résout le casse-tête « j'ai une app Laravel, je veux envoyer 10 000 emails/mois, je ne veux pas de Postmark à 15 $/mois et je ne veux pas que Google voie mes emails ». Il suffit de pointer MAIL_HOST vers Relay (port 1025) ou d'utiliser l'API REST avec une clé.

Fonctionnalités : multi-providers avec fallback, DKIM/SPF/DMARC assistés, webhooks de bounce/spam, templates avec variables, statistiques (delivered, opened, clicked), suppression list auto, multi-tenants par clé API scopée, queue Laravel interne (Redis ou DB).

🚀 Installation

Via Docker (recommandé)

# docker-compose.yml
version: '3.8'
services:
  relay:
    image: hyvor/relay:latest
    container_name: hyvor-relay
    restart: unless-stopped
    ports:
      - "1025:1025"   # SMTP
      - "8080:8080"   # Console web
    environment:
      APP_URL: "https://relay.example.com"
      DB_HOST: db
      DB_DATABASE: relay
      DB_USERNAME: relay
      DB_PASSWORD: ***changeme***
      REDIS_HOST: redis
      MAIL_FROM_ADDRESS: "noreply@example.com"
      PROVIDER_TYPE: "ses"   # ses | postmark | mailgun | smtp
      SES_KEY: "***"
      SES_SECRET: "***"
      SES_REGION: "eu-west-1"
    volumes:
      - relay_data:/var/www/html/storage
    depends_on: [db, redis]
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.relay.rule=Host(`relay.example.com`)"
      - "traefik.http.routers.relay.tls.certresolver=letsencrypt"

  db:
    image: mysql:8
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ***rootpass***
      MYSQL_DATABASE: relay
      MYSQL_USER: relay
      MYSQL_PASSWORD: ***changeme***
    volumes:
      - relay_db:/var/lib/mysql

  redis:
    image: redis:7-alpine
    restart: unless-stopped

volumes:
  relay_data:
  relay_db:

Installation manuelle

git clone https://github.com/hyvor/relay.git
cd relay
composer install --no-dev
cp .env.example .env
php artisan key:generate
php artisan migrate --seed
php artisan serve

⚙️ Configuration

  1. Provider sortant (SES, Postmark, Mailgun, SMTP) — Relay relaie vers un provider avec IP dédiée, il n'envoie pas directement.
  2. Domaine : console > Domains > copier les enregistrements DNS (DKIM, SPF, DMARC, MX retour).
  3. API key scopée par domaine via console > API Keys.
  4. Laravel : MAIL_MAILER=smtp, MAIL_HOST=relay.example.com, MAIL_PORT=1025, MAIL_USERNAME=<api_key>.
  5. Webhooks : URL de bounce/spam à configurer sur le provider pour que Relay reçoive les notifications.

🔗 Alternatives

  • Postmark — Référence du marché, excellent tracking, cloud uniquement et payant.
  • SendGrid — Géant du transactionnel, plan gratuit 100/jour, politique de contenu stricte.
  • Amazon SES — Le moins cher, mais vendor lock-in AWS.
  • Postal — Serveur mail open source, plus complet (newsletters) mais plus complexe.

🔒 Sécurité

  • 🔐 HTTPS obligatoire via app-traefik : les credentials SMTP et l'API key transitent en clair sinon.
  • 🔒 API keys scopées : une clé par app/domaine, jamais une clé « admin » côté applicatif.
  • 🛡️ DKIM/SPF/DMARC corrects : sans DNS bien configuré, vos emails tombent en spam (vérifier sur mail-tester.com).
  • 🛡️ Rate limiting par clé API activé pour éviter qu'un bug n'envoie 100 000 mails.
  • 🛡️ Rétention des logs d'email (30/90 j) pour la conformité RGPD.

📚 Ressources

🔗 Pages Liées