php - enable - send email centos 7
La funciĆ³n de correo PHP no funciona en el servidor Centos (7)
Acabo de tener este problema, dos cosas.
Mis correos electrónicos iban a spam, definitivamente, compruebe eso. Probablemente porque mi servidor no tenía registros adecuados de PTR y SPF.
Pero también, me resultó mucho más fácil probar sendmail con esto:
sendmail -s ''[email protected]''
Subject:Testing!
hey there, how ya doin?
CTRL+D
Estoy usando centos Server y tengo que enviar el correo al usuario, así que copié el código de mi servidor y lo usé aquí, pero no estoy enviando correos.
El código es:
$to = $email; //writing mail to the user
$subject = "Hii";
$message = "<table>
<tr><td> Hello ".$email.",</td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
<tr><td> Some Text </td></tr>
</table>" ;
$from = "[email protected]";
// To send HTML mail, the Content-type header must be set
$headers = ''MIME-Version: 1.0'' . "/r/n";
$headers .= ''Content-type: text/html; charset=iso-8859-1'' . "/r/n";
// Additional headers
$headers .= ''From: Team <[email protected]>'' . "/r/n";
if(mail($to,$subject,$message,$headers))
{
echo "0";// mail sent Successfully.
}
else
{
echo "1";
}
Siempre se imprime 1. El mismo código funciona bien en otro proyecto. Guíame, ¿qué puedo hacer para habilitarlo aquí también? Cualquier ayuda será muy apreciada!
Después de instalar sendmail * y ejecutar los siguientes comandos:
[root@sendmail ~]# yum install sendmail*
[root@sendmail mail]# yum install dovecot
[root@sendmail mail]# cd /etc/mail/
[root@sendmail mail]# vi local-host-names
# local-host-names - include all aliases for your machine here.
example.com
[root@sendmail mail]# vi /etc/dovecot.conf
protocols = imap pop3 //uncomment
[root@sendmail mail]# m4 sendmail.mc > sendmail.cf
[root@sendmail mail]# make
[root@sendmail mail]# /etc/init.d/sendmail start
[root@sendmail mail]# /etc/init.d/saslauthd start
[root@sendmail mail]# /etc/init.d/dovecot start
[root@sendmail mail]# chkconfig sendmail on
[root@sendmail mail]# chkconfig dovecot on
[root@sendmail mail]# chkconfig saslauthd on
Todavía tenía el mismo problema. /var/log/maillog
mi /var/log/maillog
y vi un error:
My unqualified host name (domain) unknown; sleeping for retry
Después de más búsquedas, cambié /etc/hosts
de:
127.0.0.1 localhost localhost.localdomain domain
ip.ip.ip.ip domain localhost
a:
127.0.0.1 localhost.localdomain localhost domain
ip.ip.ip.ip localhost domain
y ahora la función de correo ahora está funcionando bien.
Que esto te ayude
ini_set(''sendmail_from'', ''[email protected]'');
Recomiendo usar SwiftMailer para simplemente mucho de esto.
require_once(''../lib/swiftMailer/lib/swift_required.php'');
function sendEmail(){
//Sendmail
$transport = Swift_SendmailTransport::newInstance(''/usr/sbin/sendmail -bs'');
//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
$body="Dear $fname,/n/nYour job application was successful. /n/nYours,/n/nEamorr/n/n/n/n/n/n/n";
//Create a message
$message = Swift_Message::newInstance(''Subject goes here'')
->setFrom(array($email => "[email protected]"))
->setTo(array($email => "$fname $lname"))
->setBody($body);
//Send the message
$result = $mailer->send($message);
}
Sé que esto ha sido respondido pero tuve un problema similar. En caso de que alguien más ...
/ var / log / maillog me mostró un problema con los permisos de Postfix.
sendmail: fatal: chdir /var/spool/postfix: Permission denied
Al encontrar el error, encontré que la solución es la política SELinux en CentOS (estoy usando la versión 6).
Respuesta rápida: setsebool httpd_can_sendmail 1
Puedes usar -P para hacer el cambio permanente; Solo necesitaba un correo electrónico para restablecer la contraseña, por lo que no es necesario para mi caso.
Crédito: http://www.spidersoft.com.au/2011/posftix-permission-denied-problem/?ModPagespeed=noscript
EDITAR: Hubiera comentado pero todavía no tengo suficiente reputación.
Siempre revise su maillog en / var / log / maillog para conocer la causa del problema. Tuve un problema similar una vez después de haber configurado correctamente postfix. Recibí un error diciendo fatal: setrlimit: Permission denied
. La solución es verificar si el httpd puede enviar el correo está habilitado o no por el comando getsebool httpd_can_sendmail
. Si httpd puede enviar correo está desactivado, habilítelo con el comando: setsebool -P httpd_can_sendmail 1
. Espero que esto ayude.
Yo tuve el mismo problema. Tengo un servidor de desarrollo en casa y un servidor de producción en un servidor externo y los correos entrantes van a otro servidor. PHP: s mail()
funciona bien en el servidor, pero no en casa.
Probé un poco y lo hice funcionar en casa de la misma manera que en el servidor. La diferencia entre los métodos en el servidor y el hogar es la configuración de sendmail. Servidor interno, solo tuve que instalar sendmail y estaba bien, pero en casa también tuve que instalar sendmail-cf y usarlo para agregar la dirección del servidor de correo saliente.
Supongamos que tiene Centos, Apache y PHP en el servidor de su casa y desea enviar correos electrónicos utilizando la función mail () de PHP: s.
1) Configure el nombre de host en el servidor doméstico en dos lugares: / etc / sysconfig / network y / proc / sys / kernel / hostname de esta manera:
# nano /etc/sysconfig/network NETWORKING=yes HOSTNAME=mydns157.dlinkddns.com # nano /proc/sys/kernel/hostname HOSTNAME=mydns157.dlinkddns.com
2) Instale sendmail y sendmail-cf:
# yum install sendmail sendmail-cf
3) Agregue la siguiente fila en /etc/mail/sendmail.mc, donde tiene su ISP: s servidor de correo saliente:
define(`SMART_HOST'',`mail.myisp.com'')dnl
4) Actualizar sendmail.cf:
# /etc/mail/make
5) Reinicie sendmail y apache:
# service sendmail restart # service httpd restart
6) Arranque para actualizar el nombre de host:
# reboot
Eso es. Ahora los siguientes trabajos:
# php -r''mail("[email protected]", "Subject", "Body", null, "[email protected]");''
Puedes omitir -f:
# php -r''mail("[email protected]", "Subject", "Body");''
en cuyo caso el nombre del remitente se convierte automáticamente en usuario @ nombre de host, por ejemplo. [email protected].
Algunas notas del nombre de host
La selección del nombre de host es crítica. El valor predeterminado en Centos6 es localhost.localdomain
, pero mail()
no funciona si omite su propia dirección de remitente (por ejemplo, ''[email protected]''
) al llamar a mail (). Si está seguro de que siempre llama a mail () usando su dirección real como dirección del remitente, el nombre de host puede ser el que sea, pero si tiene llamadas a mail () que carecen de la dirección del remitente (tengo cientos de llamadas similares). para propósitos de prueba), entonces debe tener un dominio real como nombre de host, porque el nombre de host de su servidor se utiliza como dominio de dirección de remitente en estos casos. Real en el sentido de que el dominio debe tener al menos un registro A de DNS (por alguna razón, mi ISP no requiere un registro NS para la dirección del remitente, solo un registro A, sino pruebas y verificaciones con su ISP). La desventaja de usar un dominio que no sea de correo electrónico como dirección de remitente es que las respuestas y las notificaciones de entrega irán al cielo de bit, pero si coloca la dirección del remitente en su código, generalmente significa que prueba y depura algo y no necesita respuesta. funcionalidad El dominio puede ser por ejemplo. el que se obtiene de un servidor dinámico dns por ejemplo. mydns157.dlinkddns.com
, que puede apuntar a su enrutador doméstico (pero no tiene que hacerlo). Puede obtener un registro DNS en PHP usando dns_get_record("mydns157.dlinkddns.com")
, que devuelve una matriz como esta:
[host] => mydns157.dlinkddns.com [type] => A [ip] => 92.152.214.137 [class] => IN [ttl] => 7
Si el type
de registro DNS anterior es NS
, el dominio actúa como un dominio de correo electrónico, lo que está bien para el nombre de host del servidor propio, pero el efecto es un poco diferente. Si establece como nombre de host un dominio de correo electrónico existente, por ejemplo. myexistingemaildomain.com
, y envíe un mensaje a [email protected]
por ejemplo, para fines de depuración, sendmail cree que el mensaje debe enviarse a la carpeta de correo del usuario me
en este servidor. Si me
usuario no existe, el envío falla y si el usuario existe, el mensaje se /var/mail/me
a /var/mail/me
. Esto puede ser lo que quieras, pero (como yo) es posible que desees que todos los mensajes se envíen fuera de las carpetas del servidor.
Su nombre de host (en el registro DNS) no necesita apuntar a la IP externa real de su servidor para que mail () funcione en casos de falta de dirección del remitente, pero no hay ningún daño. Lo principal es que el nombre de host tiene un registro A válido y que el dominio te pertenece. Si el dominio no te pertenece, entonces puede haber un agujero de seguridad. Si establece como nombre de host algún dominio de correo electrónico existente, por ejemplo. microsoft.com
(por cualquier motivo) y envíe un mensaje a alguien sin agregar su propia dirección de remitente al llamar a mail () (por ejemplo, ''[email protected]''
), la dirección del remitente será automáticamente [email protected]
. Si está registrado como root, la dirección del remitente será [email protected]
. Las respuestas y notificaciones de entregas fallidas van luego a [email protected]
y puede que esa no sea su intención.