Desarrollo web: Como mandar correos con Ubuntu

Si usted es desarrollador web y trabaja bajo Ubuntu, a lo menos con PHP y Apache, tendrá el problema a algún punto que quiere probar el envio de correos electrónicos desde su aplicativo web (por ejemplo usando la función mail() de PHP).

Lo más lógico, para un desarrollador PHP, es de usar lo que es la propuesta por default de la configuración PHP: sendmail. Mientras tanto, sendmail tiene muchos detractores, y Wikipedia dice esto:

Sendmail can be difficult to configure. Whereas nearly all popular Unix based server software has human readable configuration files, Sendmail’s configuration is not considered human readable. Instead, the Sendmail authors recommend that administrators learn and use macro language tools, particularly M4 to configure Sendmail. Sendmail is unique amongst Unix based MTAs in this requirement, and no MTA developed since Sendmail requires or recommends the use of macro languages for configuration.

Lo que no esta claro, cuando uno instala sendmail, es que en realidad es un sistema muy poco amigable, que necesita mucha configuración para funcionar bien, y esta configuración es practicamente imposible, como lo indica Wikipedia.

La solución entonces es de usar Exim4, que se puede configurar rapidamente (pero no tan facilmente tampoco).

Para instalar exim4, primero desinstalamos el sendmail

sudo apt-get remove sendmail

El apt-get nos indica que podemos eliminar una serie de paquetes instalados con sendmail, usando el comando

sudo apt-get autoremove

Ahora instalamos exim4

sudo apt-get install exim4

Instala una serie de paquetes ligados. Pero no es todo. Se tiene que configurar, usando

sudo dpkg-reconfigure exim4-config

El programa nos trae en una interfaz terminal en color que nos pide varias preguntas:

  1. OK
  2. Distribución por internet (SMTP)
  3. Nombre del correo sistema: el nombre de la máquina (cualquier nombre, pero evita los caracteres raros)
  4. OK
  5. Direcciones IP: 127.0.0.1
  6. Otros destinos: localhost
  7. Relays: vacío
  8. Relays 2: vacío
  9. OK
  10. Minimisar pedidos DNS: sí (es una máquina de desarrollo, no un servidor)
  11. Formato Maildir (somos desarrolladores, queremos las cosas prácticas)
  12. Separar la configuración: No (no hay mucho configurado de toda forma)
  13. Hecho

Al fin de este proceso y de reiniciar Apache (sudo /etc/init.d/apache2 restart), usar un script PHP que contiene, por ejemplo: mail(‘yo@hotmail.com’,’hola’,’mi mensaje llega’); debería mandar el mensaje correctamente a la cuenta yo@hotmail.com

Comments

Esta prueba resultó exitosa para eniar a un correo gmail.
No logré recibirlo en hotmail ni en el sistema de mi universidad (pucp.edu.pe).

Deeb ser porque el dominio usado no está verificado.

En el campo from obtengo: data@adagio-laptop.cybernet.org
cybernet.org lo inventé, al igual que adagio-laptop que es el hostname de esa pc.

¿Podría establecer un usuario específico para que aparezca en el campo FROM? ( debería ser en la funcion mail() )

¿Se podría trbajar con exim4 y la funcionalidad completa de enviar mails en un contexto de IP público dinámico, sin un dominio público estádico?

¿Se deben realizar configuraciones especiales de MX Records o configuración del MTA?

Hola, segui tus instrucciones a pie de letra y me dio un error 77:mailto not found al enviar el mail, esto es porque no mencionas que tambien hay que instalar el mailx.

Salu2 y gracias por la guia.