This commit is contained in:
137
mail-relay/README.md
Normal file
137
mail-relay/README.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# Mail Relay - SMTP de salida para stacks
|
||||
|
||||
Stack de relay SMTP interno para centralizar el envio de correos de tus apps sin montar un servidor de correo completo.
|
||||
|
||||
## 📋 Descripcion
|
||||
|
||||
Este stack despliega un relay SMTP con Postfix usando `boky/postfix` para:
|
||||
- Recibir correo SMTP desde contenedores internos
|
||||
- Reenviar todo a un proveedor SMTP externo (smarthost)
|
||||
- Firmar con DKIM (autogenerado)
|
||||
- Unificar configuracion de correo para todos los stacks
|
||||
|
||||
No incluye recepcion de correo (MX, IMAP, POP3, webmail).
|
||||
|
||||
## 🚀 Despliegue
|
||||
|
||||
### 1. Preparar rutas y secreto en el host
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /opt/mail-relay/{queue,opendkim,secrets}
|
||||
sudo chmod 700 /opt/mail-relay/secrets
|
||||
printf '%s' 'CAMBIA_ESTA_PASSWORD_SMTP' | sudo tee /opt/mail-relay/secrets/relayhost_password > /dev/null
|
||||
sudo chmod 600 /opt/mail-relay/secrets/relayhost_password
|
||||
```
|
||||
|
||||
### 2. Desplegar desde Portainer
|
||||
|
||||
1. Ve a **Stacks** -> **Add stack**
|
||||
2. Nombre: `mail-relay`
|
||||
3. Configura el repositorio Git
|
||||
4. Compose path: `mail-relay/docker-compose.yml`
|
||||
5. Carga variables desde `mail-relay/stack.env`
|
||||
6. Ajusta al menos:
|
||||
- `MAIL_RELAY_HOSTNAME`
|
||||
- `MAIL_RELAY_ALLOWED_SENDER_DOMAINS`
|
||||
- `MAIL_RELAY_MASQUERADED_DOMAINS`
|
||||
- `MAIL_RELAY_SMARTHOST`
|
||||
- `MAIL_RELAY_SMARTHOST_USERNAME`
|
||||
7. Deploy del stack
|
||||
|
||||
## ⚙️ Variables importantes
|
||||
|
||||
```env
|
||||
MAIL_RELAY_SMARTHOST=[smtp.proveedor.tld]:587
|
||||
MAIL_RELAY_SMARTHOST_USERNAME=usuario-smtp
|
||||
MAIL_RELAY_SMTP_TLS_SECURITY_LEVEL=encrypt
|
||||
MAIL_RELAY_ALLOWED_SENDER_DOMAINS=tudominio.com
|
||||
MAIL_RELAY_MASQUERADED_DOMAINS=tudominio.com
|
||||
```
|
||||
|
||||
La password SMTP no se pone en `stack.env`; se lee desde el archivo host:
|
||||
|
||||
```text
|
||||
/opt/mail-relay/secrets/relayhost_password
|
||||
```
|
||||
|
||||
## 🔌 Conectar otras apps
|
||||
|
||||
En cada stack que deba enviar correo, añade la red externa:
|
||||
|
||||
```yaml
|
||||
networks:
|
||||
mail_internal:
|
||||
external: true
|
||||
```
|
||||
|
||||
Y en el servicio de la app:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
tu-app:
|
||||
networks:
|
||||
- default
|
||||
- mail_internal
|
||||
```
|
||||
|
||||
Config SMTP en la app:
|
||||
|
||||
```env
|
||||
SMTP_HOST=mail-relay
|
||||
SMTP_PORT=587
|
||||
SMTP_FROM=noreply@tudominio.com
|
||||
```
|
||||
|
||||
## ✅ DNS minimo recomendado
|
||||
|
||||
Para buena entregabilidad en Gmail/Outlook:
|
||||
- SPF
|
||||
- DKIM
|
||||
- DMARC
|
||||
|
||||
### SPF (ejemplo)
|
||||
|
||||
```text
|
||||
v=spf1 include:spf.tu-proveedor.tld ~all
|
||||
```
|
||||
|
||||
### DKIM
|
||||
|
||||
Tras el primer arranque, extrae el TXT generado:
|
||||
|
||||
```bash
|
||||
find /opt/mail-relay/opendkim -type f -name '*.txt' -exec echo '### {}' \; -exec cat {} \;
|
||||
```
|
||||
|
||||
Copia esos valores a tu DNS.
|
||||
|
||||
### DMARC (inicio en monitorizacion)
|
||||
|
||||
```text
|
||||
v=DMARC1; p=none; adkim=s; aspf=s
|
||||
```
|
||||
|
||||
## 🧪 Prueba rapida
|
||||
|
||||
```bash
|
||||
docker exec -i mail-relay sendmail -t <<'EOF'
|
||||
From: noreply@tudominio.com
|
||||
To: destino@example.com
|
||||
Subject: prueba mail relay
|
||||
|
||||
Correo de prueba del stack mail-relay.
|
||||
EOF
|
||||
```
|
||||
|
||||
## 🛠️ Troubleshooting
|
||||
|
||||
Ver logs:
|
||||
|
||||
```bash
|
||||
docker logs -f mail-relay
|
||||
```
|
||||
|
||||
Errores tipicos:
|
||||
- `Relay access denied`: revisa `MAIL_RELAY_ALLOWED_SENDER_DOMAINS`
|
||||
- Auth fallida con proveedor: revisa usuario/password SMTP
|
||||
- Rechazo por DNS: valida SPF/DKIM/DMARC
|
||||
Reference in New Issue
Block a user