php - segundos - wordpress no se puede acceder a este sitio web
¿Cómo puedo habilitar el correo en Wordpress? (2)
Estoy usando Apache 2.2.25 y PHP 5.3.28 en mi escritorio de Windows 8. Una vez, cuando estaba recuperando mi contraseña de wordpress, recibí este error:
El correo electrónico no pudo ser enviado. Posible motivo: su host puede haber desactivado la función de correo ().
Busqué en Google que cómo puedo habilitar la función mail (), encontré que necesito configurar un servidor de correo con mi servidor. Descargué hMailServer, pero no funcionó ... Por favor, ¿cómo puedo habilitar la función mail ()? ¿Qué servidor de correo tendré que descargar?
Me encontré con este mismo problema y nada de lo que pude encontrar en ninguna de las sugerencias de WordPress me lo resolvió.
Luego comencé a investigar si era la instalación de PHP en sí la que había desactivado la función de correo, pero nada de eso funcionaba. Todo parecía que estaba configurado correctamente.
Todos estos problemas comenzaron una vez que actualicé mi servidor a CentOS 7, que usa SELinux (Security Enhanced Linux) y lo que aprendí en las últimas semanas con SELinux es que si algo no funciona, pero todo parece debería estar funcionando ... eso significa que SELinux te está bloqueando en secreto y en silencio.
Y viola.
Si está ejecutando y SO que usa SELinux, solo ejecute el siguiente comando como root:
setsebool -P httpd_can_sendmail=1
Hay una configuración de seguridad que evita inherentemente que el servidor web envíe correos electrónicos. Cuando activa el interruptor y le dice a SELinux que está bien que el servidor web envíe un correo electrónico, todo funciona de repente.
Como publiqué aquí :
Este es un mensaje de error muy molesto, ya que podría ser muchas cosas, y no revela el error real (que a menudo se silencia en otras partes del código).
Este error aparece cuando la función wp_mail()
devuelve falso, que a su vez podría suceder si phpmailer->Send()
devuelve falso o genera una excepción.
Cómo mostrar advertencias desde la función de mail()
de PHP mail()
Normalmente, estos son silenciados por defecto, y desafortunadamente WordPress nunca los captura. Para mostrarlos, simplemente elimine los signos @
de @mail(...
en wp-includes/class-phpmailer.php
en la función mailPassthru()
:
if (ini_get(''safe_mode'') || !($this->UseSendmailOptions)) {
$rt = @mail($to, $this->encodeHeader($this->secureHeader($subject)), $body, $header);
} else {
$rt = @mail($to, $this->encodeHeader($this->secureHeader($subject)), $body, $header, $params);
}
Cómo buscar otras causas posibles:
Agregue una sola línea al final de
wp_mail()
en/wp-includes/pluggable.php
:// Send! try { return $phpmailer->Send(); } catch ( phpmailerException $e ) { //------------- This next line is the one to add ------------------- if (WP_DEBUG) echo ''<pre>'' . esc_html(print_r($e, TRUE)) . ''</pre>''; return false; }
Va a volcar todos los detalles de dónde se produjo la excepción. Lamentablemente, a veces incluye este mensaje de excepción inútil: " No se pudo crear una instancia de la función de correo ". Sí, gracias WordPress, eso es realmente útil.
Al observar la excepción, puede encontrar el número de línea del error y, con suerte, puede rastrearlo a través del código para encontrar la causa real.
Buena suerte. Con suerte, WordPress mejora el manejo de errores de correo electrónico en algún momento en el futuro.