¿Cómo tener mi PHP Enviar correo?


Respuestas:


51

Del manual de correo de php:

Requisitos

Para que las funciones de correo estén disponibles, PHP requiere un sistema de correo electrónico instalado y en funcionamiento. El programa que se utilizará está definido por la configuración en el archivo php.ini.

Esto significa que debe instalar algún tipo de servidor de correo y configurar php para usarlo. Por lo general, este servidor de correo es postfix en Ubuntu. Sin embargo, si el lado php que está codificando eventualmente se almacenará en el lado de un servicio de alojamiento (por ejemplo, xmission), lo más probable es que un servidor de correo ya esté instalado allí. En ese caso, simplemente pruebe su sitio en línea en lugar de localmente.

Si necesita probarlo en su propio sistema o si desea alojarlo en su propio servidor doméstico, continúe con:

Instalación Postfix

Instalación: postfix Instalar postfix / sudo apt-get install postfix Durante el proceso, se le preguntará en qué modo desea instalar postfix. Hay cuatro modos posibles:

  • Internet : su propio servidor de correo.
  • Satélite : se utilizará un proveedor de correo externo (por ejemplo, Google) para enviar y recibir correo. El servidor no recibirá ningún correo.
  • Smarthost : Mezcla entre los dos. El correo se almacena localmente pero se envía a través de un proveedor de correo externo.
  • Solo local : no te concierne. Es un servidor de correo interno del sistema. Solo puede enviar correo de un usuario a otro en el sistema.

El resto de las opciones de instalación dependen de su elección de esta configuración general.

Lo más probable es que elija una instalación satelital. Eso significa que el correo se enviará utilizando un proveedor externo. Como servidor smtp (servidor de correo saliente), deberá especificar los proveedores smtp. El resto de las opciones se explica por sí mismo.

Configuración posterior a la instalación

La mayoría de los servidores smtp requieren una autenticación de contraseña para enviar correo. Entonces postfix necesitará saber esa contraseña. También hay cosas como el cifrado a tener en cuenta (que tendrás que buscar en Google). Así es como configuras postfix usando la autenticación de contraseña (sasl):

  • Instale libsasl2-modules Instalar módulos libsasl2 y sasl2-bin Instalar sasl2-bin haciendo clic en los iconos del Centro de software o desde la terminal usando:

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • Habilite sasl-auth agregando estas líneas a /etc/postfix/main.cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    
  • Cree un archivo /etc/postfix/sasl_passwordcon una línea como:

     smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
    

    Sustituya la contraseña real, el nombre de usuario y la dirección smtp.

  • Actualizar postfix:

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   
    

    Es posible que tenga que eludir el error 'permiso denegado' de chown postfix:postfix /etc/postfixantemano.

Esto debería hacerlo en la mayoría de los casos. Sin embargo, algunos proveedores de SMTP requieren una dirección específica como remitente o encriptación.

Relacionado: PEAR :: La interfaz de correo también puede ser de su interés.

Es posible que a Gmail (y quizás a otros servicios) no le guste que intentes enviar correo de esta manera, ya que podría considerarse inseguro según sus estándares, y bloquearía tu intento, es decir, no pasará nada en la pantalla o algún lugar del proceso completo bloqueará Su autenticación. Además, su POP3 debe estar habilitado.

Para contrarrestar eso, mira aquí. (Si desea estar seguro, cree una cuenta ficticia de Gmail)


Enviar correo desde Ubuntu (local) funciona. Pero, ¿qué pasa si quiero que mi Windows use esta máquina para enviar correo (PHP también)? ¿Cómo configuro eso?
JM en el trabajo

No estoy seguro de haber entendido la pregunta. Puedes lijar desde tu máquina Ubuntu. ¿Ahora lo que quieres hacer es enviar mal a través de esa máquina Ubuntu desde tu PC con Windows a través de php? ¿Es eso correcto?
con-f-use

2
Ahora el paquete libsasl2 no existe. Estoy usando 11.04. Su libsasl2-2 según el paquete actualizado ..
mythicalcoder

61

Como ya se señaló, postfix sería una exageración si solo necesita enviar correos electrónicos desde php mientras desarrolla aplicaciones en la computadora de su hogar.

Yo personalmente uso el paquete ssmtp muy simple y liviano. Utilizará cualquier servidor smtp para enviar correos electrónicos salientes. Instálelo ejecutando:

sudo apt-get install ssmtp

Luego edite el /etc/ssmtp/ssmtp.confarchivo, comente la línea existente de mailhub y agregue las siguientes líneas (este ejemplo es para el servidor gmail smtp):

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

(Proporcione su nombre de usuario y contraseña de gmail. Por supuesto, puede usar cualquier otro servidor SMTP).

Ahora asegúrese de que su php.ini tenga la correcta sendmail_path. Debería leerse como:

sendmail_path = /usr/sbin/sendmail -t

( De los comentarios de @ dima-l y @ omar-sabic : No tiene que especificar ssmtpaquí porque la instalación debería haber creado un enlace simbólico para /usr/sbin/sendmail, que apunta correctamente ssmtp. De lo contrario, debe especificar sendmail_path = /usr/sbin/ssmtp -t)

Vuelva a cargar apache y su php debería poder enviar correos electrónicos salientes ahora.


3
Creo que quisiste decir sendmail_path = /usr/sbin/ssmtp -t. Esto funcionó, gracias
Omer Sabic

1
ssmtp debería crear un enlace simbólico para /usr/sbin/sendmail, que apunta correctamente a ssmtp. Por lo tanto, el uso también sendmail_path = /usr/sbin/sendmail -tdebería funcionar
Dima L.

2
Más información sobre la configuración ssmtp(encontré algunas notas útiles): Cómo configurar el correo PHP en Debian : esta pregunta + este enlace ayudaron a configurar el programa.
gskema

1
Para gmail, tenga en cuenta que debe configurar su cuenta de Google para permitir que "aplicaciones inseguras" funcionen. Consulte support.google.com/accounts/answer/6010255
aesede el

1
También tuve que agregar la siguiente línea: FromLineOverride=YESpara evitar el siguiente error:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons

29

PHP requiere un cliente SMTP para enviar correo. Puede instalar un agente de transferencia de correo (MTA) con todas las funciones como Postfix para cumplir esta función, pero es excesivo si solo necesita enviar correo a través de PHP. En su lugar, instale msmtp . Es liviano y mucho más simple de configurar.

Instalar msmtp

sudo apt-get install msmtp-mta ca-certificates

Configurarlo

Cree un nuevo archivo de configuración:

sudo vi /etc/msmtprc

... con la siguiente información de configuración:

# Set defaults.
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

Debe reemplazar los datos de configuración representados por todo dentro de "<" y ">" (inclusive, elimínelos). Para host / nombre de usuario / contraseña, use sus credenciales normales para enviar correo a través de su proveedor de correo.

Dile a PHP que lo use

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

Agregue esta sola línea:

sendmail_path = /usr/bin/msmtp -t

Por supuesto, 'sudo vi /etc/php5/conf.d' sin php.ini no funcionará. En mi caso (Ubuntu), tuve que editar '/etc/php5/apache2/php.ini' y también reiniciar apache 'sudo /etc/init.d/apache2 reload' para que funcione.
Dejan

1
Por cierto, puedes probar tu configuración de msmtprc usando:cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Dejan

Sería bueno, pero no funciona para mí. Nada aparece en su registro. Parece totalmente bien, pero sin dados.
James T Snell

2
Para que msmtp esté disponible en todo el sistema, instale "msmtp-mta".
colan

1
En caso de que sea demasiado literal como yo en las siguientes instrucciones, en realidad no mantiene los corchetes <> en el archivo de configuración. Me tomó unos buenos 20 minutos resolver eso
de Raad

4

Debería ser una solución simple. Solo necesita instalar Postfix que hace el correo electrónico real.

sudo apt-get install postfix

Desea ejecutarlo desde un terminal (y no desde el centro de software) porque necesita hacerle algunas preguntas de configuración. Debería encontrar que solo acepta todos los valores predeterminados (solo local, etc.).


2

Esta es una vieja pregunta y hay respuestas dignas arriba, pero que necesitaba eximpara mi entorno. Además, confirme que tiene sendmail instalado en primer lugar ( $ which sendmail- debería devolver algo como / usr / sbin / sendmail). Encontré una buena guía en linode.com , pero lo esencial es:

apt-get install exim4-daemon-light mailutils

seguido por:

dpkg-reconfigure exim4-config

que te llevará a un editor interactivo.


1

Gran respuesta , con-f-use.

Tengo una cosa que agregar sobre la "cuenta ficticia de gmail":

Esto es muy recomendable porque debe configurar su cuenta de gmail para permitir aplicaciones menos seguras: https://www.google.com/settings/u/0/security/lesssecureapps De lo contrario, obtendrá un "inicie sesión con su navegador web e intente nuevamente "error en su /var/log/mail.logarchivo.

También descubrí que recibo un error de tiempo de espera a menos que envíe el certificado raíz de gmail smtp. Para hacer esto:

sudo nano /etc/postfix/main.cf

agregue lo siguiente al final del archivo

smtp_tls_CAfile = /etc/postfix/cacert.pem

Luego copie el certificado raíz thawte en el cacert.pemarchivo:

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

Aquí está el enlace que utilicé: Configurar Postfix para usar Gmail SMTP en Ubuntu | EasyEngine

Espero que esto le ahorre a alguien algunos folículos capilares ...


0

Encontré que las soluciones proporcionadas por Dima L. son la forma más fácil y liviana de sistema.

Solo alguna adición para mayor claridad en la configuración. Deberías comentar hostnameen el /etc/ssmtp/ssmtp.confarchivo. El ssmtp.confarchivo de muestra es el siguiente:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yourdomain.com
UseSTARTTLS=YES
AuthUser=mail@yourdomain.com
AuthPass=YOUREMAILPASSWORD

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.