Instalé Ubuntu 11.04, LAMP usando taskel.
Encuentro que PHP mail()
no funciona.
¿Supongo que necesito habilitarlo o algo así? ¿Cómo puedo hacer eso?
Instalé Ubuntu 11.04, LAMP usando taskel.
Encuentro que PHP mail()
no funciona.
¿Supongo que necesito habilitarlo o algo así? ¿Cómo puedo hacer eso?
Respuestas:
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 / sudo apt-get install postfix
Durante el proceso, se le preguntará en qué modo desea instalar postfix. Hay cuatro modos posibles:
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.
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 y 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_password
con 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/postfix
antemano.
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)
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.conf
archivo, 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 ssmtp
aquí 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.
sendmail_path = /usr/sbin/ssmtp -t
. Esto funcionó, gracias
/usr/sbin/sendmail
, que apunta correctamente a ssmtp. Por lo tanto, el uso también sendmail_path = /usr/sbin/sendmail -t
debería funcionar
ssmtp
(encontré algunas notas útiles): Cómo configurar el correo PHP en Debian : esta pregunta + este enlace ayudaron a configurar el programa.
FromLineOverride=YES
para evitar el siguiente error:550 5.7.60 SMTP; Client does not have permissions to send as this sender
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
cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
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.).
Esta es una vieja pregunta y hay respuestas dignas arriba, pero que necesitaba exim
para 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.
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.log
archivo.
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.pem
archivo:
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 ...
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 hostname
en el /etc/ssmtp/ssmtp.conf
archivo. El ssmtp.conf
archivo 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