[{"data":1,"prerenderedAt":203},["ShallowReactive",2],{"seo-verification":3,"blog-mailpit-servidor-smtp-de-pruebas-vps-ma-es":6,"promo-bar-likely":196},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-mailpit-servidor-smtp-de-pruebas-vps-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":144,"ctaBody":145,"ctaButton":146,"ctaUrl":147,"relatedPosts":148},288,"mailpit-servidor-smtp-de-pruebas-vps",{"fr":12,"en":13,"ar":14,"es":10},"self-host-mailpit-vps","mailpit-self-hosted-smtp-testing-server-on-your-vps","mailpit-بديل-mailhog-لاختبار-البريد-على-vps","Mailpit: servidor SMTP de prueba autoalojado en tu VPS","Mailpit reemplaza a MailHog como servidor SMTP de prueba en Docker: interfaz web en el puerto 8025, reverse proxy Nginx, ejemplos para Laravel, Django y n8n.",8,0,false,"2026-01-14T00:00:00+00:00","2026-10-14T23:33:30+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-mailpit-vps-poster.svg",{"categorySlug":34,"appSlug":35},"desarrollo","mailpit","Mailpit ha reemplazado a MailHog como referencia de servidores SMTP de prueba autoalojados: binario único, interfaz moderna, API compatible con MailHog y menos de 50 MB de RAM en reposo. Esta guía cubre el despliegue completo en un VPS — Docker Compose, proxy inverso Nginx, integración CI\u002FCD y restricción del acceso de red.",[38,42,52,55,74,77,92,95,99,102,141],{"type":39,"title":40,"body":41},"h2","Por qué reemplazar MailHog por Mailpit","MailHog no se ha mantenido desde finales de 2022. Acumula dependencias obsoletas, su interfaz data de los primeros años de Bootstrap y su API nunca evolucionó. Mailpit aborda cada uno de estos puntos: está en desarrollo activo (última versión en 2024), ofrece una interfaz reactiva en tiempo real, y expone una API REST retrocompatible con la de MailHog para no romper los scripts existentes.\n\nEl cambio no requiere migración de datos: Mailpit no persiste nada por defecto. Cada reinicio comienza con un buzón vacío, que es exactamente el comportamiento deseado en un pipeline de pruebas.",{"type":43,"title":44,"items":45},"ul","Lo que Mailpit aporta en la práctica",[46,47,48,49,50,51],"Interfaz moderna con búsqueda de texto completo, visualización HTML\u002Ftexto, previsualización móvil e inspección de cabeceras","Binario único de Go compilado estáticamente — sin dependencias del sistema, funciona en un contenedor de 20 MB","Consumo de memoria inferior a 50 MB en reposo, estable incluso con miles de mensajes en sesión","API REST retrocompatible con MailHog (`\u002Fapi\u002Fv1\u002Fmessages`, `\u002Fapi\u002Fv1\u002Fsearch`) para scripts existentes","Soporte SMTP autenticado, TLS opcional y control de acceso por red","Webhook configurable para notificar a un endpoint externo en cada recepción de correo",{"type":39,"title":53,"body":54},"Prerrequisitos","Un VPS con Debian 12 o Ubuntu 22.04\u002F24.04 con **Docker y Docker Compose v2** instalados es suficiente. Mailpit está entre las herramientas más ligeras del catálogo: planifica 1 vCPU compartida y 256 MB de RAM para uso en desarrollo o CI. Se recomienda un subdominio dedicado (`mail.your-domain.com`) para acceder a la interfaz desde el navegador vía HTTPS.\n\nPuertos utilizados: **1025** (SMTP) y **8025** (interfaz web). Si un servicio de correo ya está funcionando en el puerto 1025, deberás cambiar el puerto de Mailpit (ver la sección de resolución de problemas).",{"type":56,"title":57,"steps":58},"steps","Desplegar Mailpit en 5 pasos",[59,62,65,68,71],{"title":60,"body":61},"Crear el directorio y el archivo Compose","```bash\nmkdir -p \u002Fopt\u002Fmailpit && cd \u002Fopt\u002Fmailpit\n```\n\nCrea el siguiente archivo `docker-compose.yml`:\n\n```yaml\nservices:\n  mailpit:\n    image: axllent\u002Fmailpit:latest\n    container_name: mailpit\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:1025:1025\"\n      - \"127.0.0.1:8025:8025\"\n    environment:\n      MP_MAX_MESSAGES: 500\n      MP_SMTP_AUTH_ACCEPT_ANY: \"true\"\n      MP_SMTP_AUTH_ALLOW_INSECURE: \"true\"\n      MP_UI_AUTH: \"admin:changeme\"\n    volumes:\n      - mailpit_data:\u002Fdata\nvolumes:\n  mailpit_data:\n```\n\nLos puertos están vinculados a `127.0.0.1` únicamente: Mailpit nunca se expone directamente en la IP pública. La variable `MP_UI_AUTH` activa la autenticación HTTP básica en la interfaz web — cambia la contraseña. `MP_MAX_MESSAGES` limita el número de correos conservados en memoria por sesión.",{"title":63,"body":64},"Iniciar el contenedor","```bash\ndocker compose up -d\ndocker compose logs -f mailpit\n```\n\nLa línea `starting on [::]:1025` confirma que el servidor SMTP está escuchando. Verifica que los puertos estén correctamente vinculados a localhost:\n\n```bash\nss -tlnp | grep -E '1025|8025'\n```\n\nEsperado: `127.0.0.1:1025` y `127.0.0.1:8025` únicamente — nunca `0.0.0.0`.",{"title":66,"body":67},"Configurar el proxy inverso Nginx","Crea `\u002Fetc\u002Fnginx\u002Fsites-available\u002Fmailpit`:\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name mail.your-domain.com;\n\n    ssl_certificate     \u002Fetc\u002Fletsencrypt\u002Flive\u002Fmail.your-domain.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fmail.your-domain.com\u002Fprivkey.pem;\n\n    location \u002F {\n        proxy_pass         http:\u002F\u002F127.0.0.1:8025;\n        proxy_http_version 1.1;\n        proxy_set_header   Upgrade $http_upgrade;\n        proxy_set_header   Connection \"upgrade\";\n        proxy_set_header   Host $host;\n        proxy_read_timeout 86400;\n    }\n}\n```\n\nActiva el vhost y recarga Nginx:\n\n```bash\nln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fmailpit \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F\nnginx -t && systemctl reload nginx\n```\n\nObtén un certificado Let's Encrypt si aún no lo has hecho:\n\n```bash\ncertbot --nginx -d mail.your-domain.com\n```",{"title":69,"body":70},"Probar el envío con curl","Verifica que el servidor SMTP recibe un mensaje:\n\n```bash\ncurl --url 'smtp:\u002F\u002F127.0.0.1:1025' \\\n  --mail-from 'test@example.com' \\\n  --mail-rcpt 'dest@example.com' \\\n  --upload-file - \u003C\u003CEOF\nFrom: test@example.com\nTo: dest@example.com\nSubject: Mailpit Test\n\nCuerpo del mensaje de prueba.\nEOF\n```\n\nAbre `https:\u002F\u002Fmail.your-domain.com` en tu navegador. El mensaje debe aparecer en la interfaz.",{"title":72,"body":73},"Configurar tu aplicación para apuntar a Mailpit","En tu archivo `.env` (Laravel, Symfony, n8n, Django…), reemplaza la configuración SMTP con:\n\n```\nMAIL_HOST=127.0.0.1\nMAIL_PORT=1025\nMAIL_ENCRYPTION=null\nMAIL_USERNAME=null\nMAIL_PASSWORD=null\n```\n\nPara aplicaciones que corren en Docker en el mismo host, usa el nombre de red Docker o la IP de la pasarela (`172.17.0.1` por defecto) en lugar de `127.0.0.1`.",{"type":39,"title":75,"body":76},"Mailpit en CI\u002FCD: probar correos en el pipeline","En entornos CI, Mailpit se integra como servicio sidecar. Arranca en segundos y no requiere configuración externa.",{"type":56,"title":78,"steps":79},"Integración CI\u002FCD por framework",[80,83,86,89],{"title":81,"body":82},"GitHub Actions — servicio Mailpit","```yaml\nservices:\n  mailpit:\n    image: axllent\u002Fmailpit:latest\n    ports:\n      - 1025:1025\n      - 8025:8025\n```\n\nEn las variables de entorno de tu job, define `MAIL_HOST=127.0.0.1` y `MAIL_PORT=1025`. Mailpit acepta cualquier correo sin autenticación por defecto.",{"title":84,"body":85},"Laravel — PHPUnit","En `phpunit.xml`, reemplaza el transporte con SMTP:\n\n```xml\n\u003Cenv name=\"MAIL_MAILER\" value=\"smtp\"\u002F>\n\u003Cenv name=\"MAIL_HOST\" value=\"127.0.0.1\"\u002F>\n\u003Cenv name=\"MAIL_PORT\" value=\"1025\"\u002F>\n```\n\nEn tu test, envía el correo y consulta la API de Mailpit para verificar la recepción:\n\n```php\n$response = Http::get('http:\u002F\u002F127.0.0.1:8025\u002Fapi\u002Fv1\u002Fmessages');\n$this->assertSame($response->json('total'), 1);\n$this->assertStringContainsString(\n    'Bienvenido',\n    $response->json('messages.0.Subject')\n);\n```",{"title":87,"body":88},"Django — pytest","En `settings.py` (o `settings_test.py`):\n\n```python\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nEMAIL_HOST = '127.0.0.1'\nEMAIL_PORT = 1025\n```\n\nEn tu test pytest, verifica mediante la API de Mailpit:\n\n```python\nimport requests\n\ndef test_welcome_email_sent():\n    r = requests.get('http:\u002F\u002F127.0.0.1:8025\u002Fapi\u002Fv1\u002Fmessages')\n    assert r.json()['total'] == 1\n    assert 'Bienvenido' in r.json()['messages'][0]['Subject']\n```",{"title":90,"body":91},"n8n — pruebas de flujo","En el nodo **Send Email** de n8n, configura el servidor SMTP en `127.0.0.1:1025` sin autenticación. Para verificar automáticamente que un flujo de trabajo disparó un envío, llama a `GET http:\u002F\u002F127.0.0.1:8025\u002Fapi\u002Fv1\u002Fmessages` desde un nodo HTTP Request y valida el total en un nodo IF.",{"type":39,"title":93,"body":94},"Asegurar el acceso a Mailpit","Mailpit almacena los correos **solo en memoria** — sin archivos en disco, sin base de datos. Esta es una ventaja para la confidencialidad (sin rastros persistentes), pero también una limitación: un reinicio vacía el buzón sin previo aviso.\n\n**Restricción de red.** Los puertos 1025 y 8025 están vinculados a `127.0.0.1` en la configuración de Docker Compose anterior. Nunca los expongas en `0.0.0.0` en producción o en un servidor compartido.\n\n**Autenticación HTTP básica en la interfaz.** La variable `MP_UI_AUTH=user:password` activa autenticación básica en la interfaz web. Usa una contraseña fuerte.\n\n**SMTP autenticado.** Para entornos multiequipo, activa `MP_SMTP_AUTH` con un archivo de cuentas en lugar de `MP_SMTP_AUTH_ACCEPT_ANY`.",{"type":96,"title":97,"body":98},"tip","Consejo: vaciar el buzón entre pruebas","La API de Mailpit expone un endpoint de purga: `DELETE http:\u002F\u002F127.0.0.1:8025\u002Fapi\u002Fv1\u002Fmessages`. Llámalo en tu `setUp()` de PHPUnit o fixture de pytest para comenzar cada prueba con un buzón vacío, sin necesidad de reiniciar el contenedor.",{"type":39,"title":100,"body":101},"Resolución de problemas — 4 casos frecuentes","**Puerto 1025 ya en uso.** Un servidor Postfix o Sendmail local puede estar escuchando en este puerto. Verifica con `ss -tlnp | grep 1025`. Si es así, cambia el puerto del host en `docker-compose.yml` (ej. `1026:1025`) y actualiza `MAIL_PORT` en tus aplicaciones.\n\n**Acceso denegado desde un contenedor CI.** Los contenedores Docker en GitHub Actions pueden acceder al `127.0.0.1` del runner, pero no a otros servicios via `localhost` si la red no está correctamente compartida. Usa la red `host` del runner o referencia el servicio por su nombre (`mailpit:1025`) en el archivo de flujo.\n\n**Interfaz inaccesible detrás del proxy inverso.** Las conexiones WebSocket de la interfaz en tiempo real pueden cortarse por un timeout agresivo de Nginx. Verifica que `proxy_read_timeout` esté a 86400 y que las cabeceras `Upgrade` y `Connection` se transmitan.\n\n**Rendimiento con miles de correos.** Mailpit guarda todo en memoria. Si tu pipeline genera cientos de correos por ejecución, establece `MP_MAX_MESSAGES` en un valor razonable (100-500).",{"type":103,"title":104,"headers":105,"rows":112},"comparison","Mailpit vs MailHog vs Mailtrap vs Inbucket vs smtp4dev",[106,107,108,109,110,111],"Herramienta","Mantenimiento","RAM en reposo","REST API","Persistencia","Auth SMTP",[113,120,126,133,137],[114,115,116,117,118,119],"**Mailpit**","Activo (2024)","\u003C 50 MB","Sí (v1 + v2)","Solo memoria","Opcional",[121,122,123,124,118,125],"MailHog","Abandonado (2022)","~30 MB","Sí (solo v1)","No",[127,128,129,130,131,132],"Mailtrap (SaaS)","Activo","N\u002FA (nube)","Sí","Nube (30 días)","Sí (nube)",[134,128,135,130,136,125],"Inbucket","~20 MB","Memoria o disco",[138,128,139,130,140,125],"smtp4dev","~80 MB (.NET)","SQLite opcional",{"type":39,"title":142,"body":143},"Casos de uso avanzados","**Intercepción multi-proyecto.** Una sola instancia de Mailpit puede recibir correos de múltiples proyectos simultáneamente. Usa la búsqueda de texto completo o filtra por destinatario en la interfaz para aislar mensajes de cada aplicación.\n\n**Webhook a Slack o n8n.** La variable `MP_WEBHOOK_URL` dispara un POST JSON en cada recepción. Conéctala a un flujo n8n para enrutar ciertos correos de prueba a un canal Slack del equipo.\n\n**Exportar y reproducir.** La API expone correos en formato EML (`GET \u002Fapi\u002Fv1\u002Fmessage\u002F\u003Cid>.eml`). Descarga un mensaje interceptado para reproducirlo en un cliente de correo real o para usarlo como fixture de prueba.\n\n**Mailpit en un stack de desarrollo completo.** Añade Mailpit como servicio en el `docker-compose.yml` principal de tu proyecto. Se integra naturalmente con Laravel Sail, Symfony Docker o n8n autoalojado — un solo `docker compose up` inicia todo el entorno de desarrollo con intercepción SMTP incluida.","Despliegue Mailpit en un clic en ServOrbit","Con un VPS ServOrbit Cloud, Mailpit está disponible directamente en el marketplace. Configure su SMTP de pruebas en dos minutos, sin ningún servidor aparte que gestionar.","Lanzar mi VPS Cloud","\u002Fvps-cloud",[149,169,186],{"id":150,"slug":151,"slugs":152,"title":156,"excerpt":157,"readTime":17,"views":158,"isPinned":19,"noindex":19,"publishedAt":159,"updatedAt":160,"category":161,"categories":166,"featuredImage":30,"bgImage":31,"posterImage":168,"relatedSolution":30},280,"relay-smtp-postfix-en-vps-emails-transaccionales",{"fr":153,"en":154,"ar":155,"es":151},"smtp-relay-vps-emails-transactionnels-clients","postfix-smtp-relay-on-vps-client-transactional-emails","إعداد-postfix-smtp-relay-على-vps-لبريد-المواقع","Relay SMTP Postfix en VPS: emails transaccionales de clientes","Configure Postfix como relay SMTP en un VPS ServOrbit: IPv4 dedicada, SPF, DKIM y DMARC alineados para todos sus sitios cPanel de clientes en menos de una hora.",1,"2026-08-18T00:00:00+00:00","2026-11-09T20:55:12+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":164},11,"Correo profesional","emails","bg-cyan-500\u002F10 text-cyan-400",[167],{"id":162,"name":163,"slug":164,"color":165,"icon":164},"\u002Fblog\u002Fcovers\u002Fsmtp-relay-vps-emails-transactionnels-clients-poster.svg",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":178,"views":179,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":183,"featuredImage":30,"bgImage":31,"posterImage":185,"relatedSolution":30},238,"alojar-servidor-correo-vps-mailcow",{"fr":173,"en":174,"ar":175,"es":171},"heberger-serveur-email-vps-mailcow","hosting-your-own-email-server-on-a-vps-with-mailcow","استضافة-خادم-البريد-الإلكتروني-على-vps-باستخدام-mailcow","Alojar su servidor de correo en un VPS con Mailcow","Instale Mailcow en un VPS Linux para alojar su propio servidor de correo soberano: instalación, entregabilidad y migración desde Google Workspace.",20,3,"2026-08-08T00:00:00+00:00","2026-10-29T03:10:23+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":164},[184],{"id":162,"name":163,"slug":164,"color":165,"icon":164},"\u002Fblog\u002Fcovers\u002Fheberger-serveur-email-vps-mailcow-poster.svg",{"id":187,"slug":188,"slugs":189,"title":193,"excerpt":194,"readTime":195,"views":18,"isPinned":19,"noindex":196,"publishedAt":197,"updatedAt":198,"category":199,"categories":200,"featuredImage":30,"bgImage":31,"posterImage":202,"relatedSolution":30},199,"spf-dkim-dmarc-superar-el-umbral-de-5000-correos",{"fr":190,"en":191,"ar":192,"es":188},"spf-dkim-dmarc-delivrabilite-emails-pro","spf-dkim-dmarc-passing-the-5000-email-threshold","spf-وdkim-وdmarc-تجاوز-عتبة-5000-رسالة","SPF, DKIM, DMARC: superar el umbral de 5000 correos","Gmail y Outlook rechazan con un error SMTP 550 a los remitentes sin DMARC alineado. Cómo configurar SPF, DKIM y DMARC para superar el umbral.",4,true,"2026-08-01T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":164},[201],{"id":162,"name":163,"slug":164,"color":165,"icon":164},"\u002Fblog\u002Fcovers\u002Fspf-dkim-dmarc-delivrabilite-emails-pro-poster.svg",1794270616969]