Teléfono y Whatsapp: 675 18 68 80

Enviar emails desde localhost con PHP y msmtp

Cuando desarrollamos en PHP desde un sistema GNU/Linux usando la versión desktop y queremos enviar emails con la función mail() de PHP, vemos que ningún correo llega al destinatario. En este pequeño tutorial, se enseña cómo configurar msmtp para que actúe como relay de salida de correo y podamos enviar desde localhost tantos correos como queramos, usando la configuración de una cuenta de correo electrónico existente.

1- instalamos msmtp

Instalamos msmtp y ca-certificates para ser usado con SSL:

sudo apt-get install msmtp ca-certificates

creamos y editamos el fichero /etc/msmtprc:

sudo nano /etc/msmtprc

dentro de el, añadimos:

defaults
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
 
account default
host smtp.gmail.com
port 587
auth on
user usuario@gmail.com
password micontrasenya
from usuario@gmail.com
logfile /var/log/msmtp.log

y reemplazamos los campos user y password.

damos permisos de ejecución al fichero creado:

sudo chmod 0644 /etc/msmtprc

enviamos u email de prueba a destinatario@gmail.com:

echo -e "Subject: Email de prueba\r\n\r\nEsto es un email de prueba" |msmtp --debug --from=default -t destinatario@gmail.com

2- lo integramos con PHP y Apache

el siguiente paso es configurar PHP para que use msmtp como sendmail, para ello editamos el fichero php.ini:

sudo nano /etc/php5/apache2/php.ini

buscamos ‘sendmail_path‘ y lo reemplazamos por:

sendmail_path = '/usr/bin/msmtp -t'

reiniciamos apache:

sudo service apache2 restart

y podemos enviar un email de prueba desde un fichero PHP correo.php:

<?php
mail ( 'destinatario@gmail.com', 'Prueba de email desde PHP', 'Funciona bien eh...');

ahora lo ejecutamos:

php correo.php

  • Angel Bran

    Muchas gracias por enseñarnos este metodo, me fue de mucha ayuda, pero tengo una duda:

    Por que me aparece este mensaje en la consola y como podría solucionarlo:
    msmtp: cannot log to /var/log/msmtp.log: cannot open: Permiso denegado

    • walo

      Posiblemente porque no tenga permisos.