Docker y correo PHP
6 de octubre de 2020¿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.
+