¿Qué tiene de malo este script PHP?

Hola,

Además de los comentarios anteriores, le sugiero que verifique también los encabezados del mensaje recibido, vaya a GMail, seleccione Mostrar origen / origen y busque las líneas sobre el filtrado de spam, desde allí puede verificar:

  • si el remitente se considera permitido o
  • Si el problema está relacionado con el contenido.

La mayoría de las veces, en los alojamientos compartidos, el problema se debe a una configuración incorrecta del dominio. Y puede verificar esto inmediatamente, use el comando dig para ver la configuración de su dominio:

excava tudominio.tld CUALQUIERA

Debería ver un registro TXT con una regla similar a esta:

v = spf1 mx a -todos

SPF significa Sender Policy Framework y lo utilizan los servicios de correo para verificar si la IP del remitente está en el rango permitido por el propietario del dominio, es decir, usted. La configuración anterior dice considerar válidos todos los servidores en los registros A y MX y descartar todos los mensajes provenientes de otras fuentes.

Existen múltiples configuraciones variables, dependiendo de su configuración, pero el registro TXT DEBE estar allí, si esto falta, los mensajes terminarán en la carpeta SPAM, sin importar lo que haga con sus scripts.

Una herramienta para verificar si la configuración actual de SPF funciona bien es spfquery : desde los encabezados del mensaje, obtenga el correo electrónico e IP del remitente y escriba:

spfquery -guess “v = spf1 mx a -all” -ip IP.HERE -sender [correo electrónico protegido]

Si está permitido, recibirá un mensaje como este:

spfquery: el dominio de YOURDOMAIN.TLD designa la IP como remitente permitido

Para garantizar la capacidad de entrega de los mensajes, también puede configurar DKIM ( DomainKeys Identified Mail ), pero esto requiere un acceso de shell al servidor y es un poco más complejo, por lo que no escribiré sobre esto por ahora.

Para obtener más información del comando de excavación, puede elegir el servidor DNS para consultar (Google en este ejemplo):

excavar yourdomain.tld CUALQUIER @ 8.8.8.8

También puede consultar el servicio de alojamiento DNS, definido en los registros NS de su dominio. Resulta útil al empujar cambios e intentar ver si se aplica.

Notas

  1. Puede agregar / modificar la regla SPF para su dominio desde su panel de control en la sección “Administrar DNS”
  2. Una vez guardado, la configuración se hará visible en 24 horas, esto debido a los cachés de los servidores DNS
  3. Puede forzar la propagación modificando el TTL (Time To Live) de sus registros, pero tenga en cuenta que cuando el TTL es bajo, digamos menos de 600 segundos, el acceso a su sitio web puede disminuir, ya que los servidores DNS deberán obtener los nuevos valores con mayor frecuencia
  4. Si la configuración es incorrecta, entonces el servidor puede “volverse loco” y dejar de enviar correos electrónicos, pero esto se puede solucionar, así que no se asuste
  5. A veces, dependiendo del servicio de alojamiento, el panel DNS realmente no escribe los cambios que aplica, incluso si en la página parece funcionar bien: si ve a través de la excavación que nada ha cambiado, digamos 48h, solicite el soporte para aplicar los cambios
  6. No sé qué sistema operativo está utilizando, dig y spfquery están disponibles en Linux, y probablemente Mac OS, sé que dig se puede instalar en máquinas Windows a través del paquete BIND en: https://www.isc.org/ descargas / enlace /

Si ve que el dominio no está configurado o tiene dudas sobre la configuración actual, solicite ayuda al servicio de asistencia.

CAMPO DE GOLF

  • Descripción del proyecto
  • Sintaxis de registro SPF
  • DomainKeys Identified Mail (DKIM)
  • Validación de SPF y DKIM en tiempo SMTP con exim

Espero que te ayude a arreglarlo. ¡Adiós!

En primer lugar, verifiqué su sintaxis contact.php y parece que tiene una etiqueta adicional en su código. Los navegadores lo arreglarían automáticamente la mayor parte del tiempo, pero nunca sabrás lo que podría pasar “detrás de las cortinas”. Siempre verifique su código con los servicios de validación W3C. He arreglado tu código:

  1. Marca de orden de bytes eliminada
  2. Eliminado redundante
  3. Código formateado
  4. ¡Además, en send_contact.php no tiene un punto y coma “;” después de la función mail ()! Si no tiene configurado el error de visualización, nunca verá que el analizador PHP le dice que tiene un error de sintaxis. Solo vería el error de “pantalla blanca”. ¡Pero debido a que no ha agregado ningún tipo de mensaje de error, espera una pantalla en blanco en su script! Esa no es realmente la forma en que se desarrollan los scripts.

Así es como se ve ahora: contact.php y send_contact.php

Ahora, ¿qué tiene de malo el script de correo real (ver código original)?

Para resolver el problema, necesitamos saber realmente:

  1. Servicio de alojamiento que está utilizando
  2. Su entorno PHP (archivo php.ini)
  3. ¿Ha habilitado display_errors para su PHP en otro lugar?

Ahora, ¿cuáles podrían ser las razones por las cuales su correo no funciona?

  1. La función PHP mail () simplemente entrega el correo electrónico que ha compuesto en su código PHP al Agente de transferencia de correo, como sendmail . Consulte la documentación del correo (): It is important to note that just because the mail was accepted for delivery, it does NOT mean the mail will actually reach the intended destination. Entonces, es por eso que la mitad de las respuestas aquí mencionan sobre la configuración incorrecta de su Agente de transferencia de correo, php.ini, o decirle que debe probar en un sistema local. Configurar un servidor de correo completo es difícil, suponiendo que tenga acceso SSH para hacerlo. El correo electrónico enviado desde un servidor de correo mal configurado podría terminar fácilmente en una carpeta de correo no deseado o ignorado por los servicios de correo electrónico, como Gmail. Los correos electrónicos enviados desde alojamientos gratuitos también pueden incluirse en la lista negra de los servicios de correo electrónico porque es fácil configurar algún tipo de aplicación de correo no deseado que enviaría todo tipo de correos electrónicos.
  2. La función PHP o mail () podría generar algún tipo de error, pero nunca lo verá porque no ha codificado la comprobación de errores, vea cómo debería verse:

ini_set (‘display_errors’, 1);
error_reporting (E_ALL);
$ result_message = ‘Correo enviado, compruebe su carpeta de correo no deseado si no se muestra en su bandeja de entrada.’;
tratar {
$ headers = “De:”. $ desde;
$ resultado = correo ($ a, $ asunto, $ mensaje, $ encabezados);
if (! $ result) {
$ result_message = ‘Parece que el servidor de correo está mal configurado, no puede enviar correo al Agente de transferencia de correo’;
}
} catch (Excepción $ e) {
$ result_message = ‘Hubo un error al enviar su correo:’. $ e-> getMessage ();
}

Aquí está lo que sucedió cuando intenté enviar correo con mi script desde mi VPS (Ubuntu 16.04) usando solo sendmail instalado como MTA, no he configurado el evento php.ini en absoluto:

En realidad, no necesita implementar una bicicleta nueva para el envío de correo. ¡Use bibliotecas de código abierto!

  1. Sincronizador / PHPMailer
  2. swiftmailer / swiftmailer
  3. Si realmente no desea configurar su propio servidor de correo, puede usar servicios de correo electrónico transaccionales como Mandrill o SparkPost

Debe configurar su servidor / máquina para enviar correos electrónicos. Además, deberá actualizar su php.ini para permitir el envío de correos electrónicos.

Use try-catch e imprima los errores / excepciones que lanza la función mail () y ese debería ser el primer paso para avanzar. Según los errores / excepciones, identificará lo que se necesita para habilitar / instalar en su máquina.

Debe configurar su archivo php.ini para enviar correo con éxito.

Cuidado: configuración de tiempo de ejecución

Si lo prueba en línea, tal vez su sistema local no pueda enviar ningún correo electrónico. cárguelo en un servidor y vuelva a probarlo. Si falla nuevamente. compruebe su archivo php.ini y póngase en contacto con el administrador del servidor.