Recientemente implementé un área de comentarios en mi sitio web e intenté que la notificación por correo electrónico funcionara. No parece querer enviar notificaciones por correo electrónico cuando se hacen nuevos comentarios.
Solo para ver si PHP puede enviar correos electrónicos, intenté restablecer la contraseña (porque recibirás una nueva contraseña por correo), y recibí el mensaje:
No se pudo enviar el correo electrónico. Posible motivo: su host puede haber deshabilitado la función mail ()
He marcado las casillas de verificación en Configuración -> Discusión, y el correo electrónico es válido, por lo que no es un problema de configuración. Traté de crear un archivo PHP y enviar usando mail()
, y se envió con éxito. Por lo tanto, debe haber algo extraño con WordPress.
¿Algunas ideas?
Respuestas:
Paso a paso: primero busque el archivo donde aparece el mensaje de error. Uso Notepad ++ y el comando CTRL+ Fpara buscar en archivos. Es una buena idea buscar solo las primeras palabras del mensaje de error, porque algunos mensajes de error se combinan de mensajes diferentes.
Su mensaje de error aparece en
wp-login.php
y santa suerte, solo allí. Así que echemos un vistazo por qué podría ocurrir este error.Hay dos condiciones.
$message
tiene que ser verdadero (no es una cadena vacía, no es falsa, no es nula, etc.). Ywp_mail()
no debe devolver falso.Una línea arriba, hay un filtro
$message = apply_filters('retrieve_password_message', $message, $key);
, por lo que es posible que un complemento (o tema) use este filtro y devuelva un valor que no es verdadero (cadena vacía, falso, nulo, etc.).Pero es mucho más fácil verificar si
wp_mail()
funciona o no. Escriba un pequeño complemento para enviarse un correo de prueba:(Este es el código PHP5.3. Si está ejecutando PHP5.2, elimine las cosas del espacio de nombres)
El complemento debe enviar un correo de prueba inmediatamente después de la activación. Si no, llamar a algunas páginas de back-end (p. Ej., Tablero) debería hacerlo.
Si el correo de prueba no llega, entonces probablemente tenga un problema con
wp_mail()
. Entonces active la depuración:Ponga este código en su
wp-config.php
e intente enviarse un correo de prueba. Ahora debería recibir algunos mensajes de error y también deberían iniciar sesiónwp-content/debug.log
(el registro de depuración puede crecer mucho si hay más errores causados por complementos y / o temas).En este punto, tienes buena información si
wp_mail()
falla y si es así, ¿por qué? Siwp_mail()
funciona correctamente y llegó el correo de prueba, regrese al principio y descubra por qué$message
no es cierto.Si tiene problemas con
wp_mail()
, tenga en cuenta quewp_mail()
no utiliza lamail()
función PHP . WordPress usa una clase PHP ( PHPMailer ). Tal vez solo necesite un complemento para usar SMTP en lugar de sendmail. O el problema se encuentra en otro lugar. No lo sabemos Tienes que investigar.fuente
mail()
. Al menos en algunos casos (vea la línea 732 inwp-includes/class-phpmailer.php
. No tengo acceso al ftp atm pero intentaré sus sugerencias lo antes posible. Seguramente esto me llevará a algún lado. ¡Muchas gracias!wp_mail()
y parece funcionar bien, recibí el correo como esperaba. Sin embargo, WP aún no enviaba los correos electrónicos de comentario / restablecimiento de contraseña, y no recibí nada en el archivo de registro (no fue creado), así que intenté instalar un complemento de correo SMTP y configuré una nueva cuenta de correo electrónico para Wordpress Funciona ahora pero todavía no entiendo por qué no pudo enviar antes. ¡Gracias!Este es un mensaje de error súper 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
wp_mail()
función devuelve falso, lo que a su vez podría suceder siphpmailer->Send()
devuelve falso o genera una excepción.Cómo mostrar advertencias desde la
mail()
función de PHPEstos normalmente están silenciados por defecto, pero desafortunadamente WordPress nunca los captura. Para mostrarlos, basta con quitar los
@
signos de@mail(...
enwp-includes/class-phpmailer.php
lamailPassthru()
función:Cómo buscar otras posibles causas:
Agregue una sola línea al final de
wp_mail()
in/wp-includes/pluggable.php
:Volcará todos los detalles de dónde se generó 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. Esperemos que WordPress mejore el manejo de errores de correo electrónico en algún momento en el futuro.
fuente
Tengo el mismo problema con el servidor Ubuntu en Amazon EC2. Tengo un problema al usar el enlace de restablecimiento de contraseña y también otros correos electrónicos de notificación no funcionaban.
Así que aquí hay soluciones que funcionaron para mí. Word-press utilizaba la
wp_mail()
función para enviar correos electrónicos que necesitaban unaPHPMailer
clase que utilizaba el php mailer almacenado/usr/sbin/sendmail
.Utilice esta función php simple primero para verificar el correo php
Si esto no funciona, entonces necesita instalar php mailer. Use este comando para instalar el correo php en el servidor Ubuntu.
Luego verifique las funciones de correo electrónico de word-press.
fuente
Si las otras excelentes respuestas aquí no ayudan, intente esto:
Encontré este mismo problema y nada de lo que pude encontrar en ninguna de las sugerencias para WordPress lo resolvió por mí.
Luego comencé a investigar si fue la instalación de PHP la que había deshabilitado la función de correo, pero nada de eso funcionó. Todo parecía estar configurado correctamente.
Todos estos problemas comenzaron para mí 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 silenciosa y secretamente en segundo plano.
Y viola.
Si está ejecutando y un sistema operativo que utiliza SELinux, simplemente ejecute el siguiente comando como root:
setsebool -P httpd_can_sendmail=1
Hay una configuración de seguridad que impide de forma inherente que el servidor web envíe correos electrónicos. Cuando activa ese interruptor y le dice a SELinux que está bien que el servidor web envíe un correo electrónico, todo funciona de repente.
fuente
Me encontré con esto hoy; en mi caso, la situación sucedió porque el archivo de hosts del servidor tiene el mismo nombre de dominio que la dirección de correo electrónico, apuntando a localhost. El registro mx apunta a un servidor diferente, pero el archivo de hosts está anulando DNS y WP está tratando de entregar el correo electrónico localmente. Eliminar el dominio del archivo de hosts y reiniciar sendmail resolvió este problema.
fuente
No sé si esto todavía es relevante para ti o no, pero como no hay una respuesta elegida, pensé en intentarlo una vez.
En realidad, me había enfrentado exactamente al mismo problema ya que mi anfitrión de OpenShift de repente cedió hoy y dejó de enviar correos. Excavando el código y el códice, llegué a conocer la función wp_mail () y finalmente google me llevó aquí y vi cómo podría ser anulada.
Basándome en la respuesta de @ Ralf912, modifiqué un poco el script para que el código use la API web de sendgrid.com para enviar correos en lugar del predeterminado de WordPress (supongo que:
¡Y funcionó!
fuente
Tuve el mismo error, ambas funciones (mail y wp_mail) funcionaron, pero aún tenía este error molesto. La solución fue muy fácil, pero me llevó algunas horas encontrar la razón. Así que compartiré aquí mi solución sobre el problema que podría ser (o no) el mismo que el suyo.
Intenté la función mail () y funcionó, pero cuando la prueba no especifica el último parámetro llamado 'parámetros' en la función mail (). Y WP lo usa.
Entonces, básicamente, este parámetro ("[email protected]") con la marca "-f" hace que la función mail () verifique si la dirección de correo electrónico "[email protected]" aparece en la lista de "correos electrónicos confiables".
Entonces, si no lo hace, devuelve falso, lo que hace que wp_mail () devuelva falso y conduzca al mensaje de error.
Entonces, la solución es pedirle a Hoster que haga esto por usted, o si está utilizando cPanel, simplemente agregue una cuenta de correo electrónico para esta dirección y automáticamente la agregará a la "lista de confianza".
fuente
se llamó -Direccionar ID de correo electrónico registrado para enviar correos a través de scripts, es decir (Wordpress)
fuente
Tuve este error durante siglos y probé tantas soluciones que no funcionaron. Tengo una instalación personalizada de Wordpress en AWS EC2. En primer lugar, asegúrese de que su correo de AWS SES esté habilitado a través del soporte, deben estar en la misma (o cercana) región en SES y EC2. Utilicé Google suite (gsuite) para correo electrónico para recibir / enviar correo.
Asegúrese de que el correo electrónico de prueba se envíe en AWS SES y Gsuite.
Instale el plugin Wordpress WP Mail SMTP, use la opción "Otro SMTP", tome sus credenciales SMTP de AWS SES, aquí es donde me quedé atascado.
Debe habilitar la casilla de verificación "SSL" para el cifrado, esto cambia el puerto a 465 para mí. Por fin mi prueba de correo electrónico enviada desde Worpdress fue exitosa.
fuente