Docker y correo PHP

6 de octubre de 2020

Lang: cs en de es

¿Estás usando Docker y quieres enviar correos electrónicos desde PHP usando la función del sistema mail() ? En este artículo describiré cómo configurar Docker y PHP para que el envío de correos electrónicos funcione.

En Internet, enviar correos electrónicos es algo habitual. E incluso una aplicación web (a menudo sólo una presentación web) necesita enviar correos electrónicos. Los correos electrónicos se almacenan en servidores de alojamiento de correo. Pero, ¿cómo enviar correos electrónicos?

Windows

Los desarrolladores de aplicaciones web que utilizan Windows siempre han tenido problemas con el envío de correos electrónicos. Por eso se han creado diversas herramientas de envío de emails o herramientas que capturan emails desde el entorno de desarrollo.

Unix

En Linux o cualquier otro Unix, el envío de correos electrónicos es algo estándar. Como mucho, para evitar que el correo electrónico sea descartado o caiga en SMAP, necesitas una máquina local/de prueba configurada para reenviar correos a través del servidor de correo, que está totalmente configurado para garantizar una alta entregabilidad del correo electrónico y que los correos no vayan al SPAM.

Otra opción es configurar la aplicación para que envíe los correos a través de un servidor SMTP externo. Esta es una solución bastante buena y versátil, pero hay que asegurarse de que cada aplicación está configurada de esta manera y en todos los sitios. Por supuesto, incluso entonces, algunos correos electrónicos de nivel inferior pueden no dejar la información típica de caída de la aplicación, que a menudo utilizan el envío de correo electrónico del sistema (aunque incluso este envío de correo electrónico probablemente podría ser anulado).

Docker

Actualmente, Docker es ampliamente utilizado, que es una gran manera de desarrollar aplicaciones. Sin embargo, con él vuelves a solucionar el problema del envío de correos electrónicos. Porque en Docker sólo tienes un proceso en ejecución y nada más, de ahí que no haya servidor de correo. Y si tienes Docker en un entorno de producción entonces el envío funcional de emails es imprescindible.

En general, es mejor no usar otras tecnologías a menos que haya una razón explícita para hacerlo. Es decir, a menos que haya una necesidad, Docker es sólo una tecnología inútil de conocer para producción. Cada tecnología que utilices, debes ser capaz de administrarla y tener el tiempo para hacerlo, de lo contrario te estás creando problemas.

Docker y el correo PHP

Entonces, ¿cómo configuro Docker para enviar correo electrónico desde una aplicación PHP?

Como mencioné en el artículo Docker y Cron, normalmente sólo hay un proceso ejecutándose en docker. Por lo tanto, si estás ejecutando una aplicación web (servidor web con PHP) en Docker, te encontrarás con que, que el mailserver, el servicio que se necesita para enviar correo electrónico, no se está ejecutando en el sistema. Por lo tanto, debes enviar el correo desde el script PHP utilizando el protocolo SMTP a través de un servicio externo. O puedes modificar la imagen Docker para poder seguir utilizando la función PHP mail().

En concreto, la solución es hacer que PHP utilice un comando diferente para enviar correos electrónicos a través de un servidor de correo externo.
Usaremos la utilidad del sistema msmtp para realizar el envío. En versiones antiguas de distribuciones Linux se usaba ssmtp.

La configuración para msmtp está en el archivo /etc/msmtprc.

El contenido del fichero de configuración puede tener este aspecto:

account default
host smtp.ejemplo.com
puerto 587
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
tls_certcheck activado
auth on
usuario user@domain.com
contraseña "password"
de "user@domain.com"
archivo de registro /var/log/msmtp.log

Te falta modificar la configuración de PHP. Así, al fichero php.ini añade lo siguiente:

[función mail]
sendmail_path = /usr/bin/msmtp -t

Puedes intentar enviar un correo electrónico a través de msmtp introduciendo el siguiente comando en la consola del contenedor en ejecución:

msmtp -d -a default -i -t <<END
De: from@example.com
Para: toto@example.com
Asunto: test msmtp
prueba
END

Si has configurado todo correctamente, esto funciona y puedes usar mail() en PHP de forma normal.

Confianza en el correo electrónico

Aunque envíes emails, puede que no lleguen a la bandeja de entrada de los destinatarios. Los correos pueden caer en SPAM o incluso ser descartados. Por lo tanto, compruebe siempre a través de qué servidores de correo está enviando correos y si tienen correos electrónicos son de alta confianza, sólo así habrás hecho todo lo posible para que los correos lleguen correctamente a la bandeja de entrada del destinatario.

El futuro de PHP

Decidir si el futuro es programar en PHP entonces mira este vídeo ¿Tiene sentido programar en PHP?:

Artículos sobre un tema similar

VMware frente a Proxmox: comparación de rendimiento
GitLab CI/CD: automatización de pruebas y despliegue de aplicaciones
Migración de VPS de VMware a Proxmox
Cambio en las licencias de VMware
Ejecución de Microsoft SQL Server en Linux
Copia de seguridad: el Proxmox Backup Server
Linux como router y cortafuegos
Cómo subir una imagen Docker al Registro Docker
Linux: gestión de volúmenes lógicos
Software RAID para Linux
Ejecutar una aplicación web detrás de un proxy
Migración de correo electrónico
Construcción multietapa Docker
Copia de seguridad de los datos al encender el ordenador
Podman
Importación de Windows a la virtualización Proxmox
Virtualización Proxmox
Docker y Cron
Lenovo ThinkPad X1 Carbon: puesta en servicio del módem LTE EM7544
Proyecto Yocto: Cree un sistema operativo personalizado para dispositivos integrados
Preparación de un servidor Linux para ejecutar una aplicación web en Python
Cómo solucionar el bajo rendimiento de los archivos compartidos en Docker
Cómo empezar a utilizar Docker correctamente
Instalación de Linux en un servidor HPE ProLiant DL320e dedicado
Cómo poner a prueba una aplicación web
Por qué utilizar el sistema de archivos JFS
Cómo arrancar desde un disco de 4TB con GTP usando UEFI
Sistema de archivos Btrfs
Raspberry PI
WINE - ejecución de programas Windous en Linux
Sistema operativo GNU/Linux

Boletin informativo

Si está interesado en recibir noticias puntuales por correo electrónico.
Puedes registrarte rellenando tu email suscripción de noticias.


+