Pregunta

Estoy usando la biblioteca SwiftMailer de PHP para enviar correos electrónicos a granel (CANSPAM siguientes y RFC).

Todo funciona bien hasta que me encuentro con un dominio que no tiene una entrada correspondiente MX en el DNS. En ese momento, mi script simplemente se cuelga - Asumo que es porque el sendmail no ha regresado. Esto puede durar sólo unos minutos, o puede durar muchas horas.

Me han confirmado que las direcciones de mi guión (barra) de Sendmail colgar en son aquellos que no tienen una entrada DNS MX. Todo lo demás envía bien.

¿Hay alguna manera de comprobar si el DNS MX existe dentro de PHP antes de intentar enviar el mensaje? Es esta escalable (es decir, será que las operaciones de búsqueda adicional en el DNS realmente me ralentizar, o va a estar bien b / c, entonces el MX se almacena en caché localmente para sendmail para su uso en la entrega del mensaje)?

Gracias por su ayuda

--- --- ACTUALIZACIÓN Probé las soluciones a continuación, que me ayudó a reducir lo que es el problema. Parece que no es una cuestión de si existe o no la entrada MX. El problema es que la búsqueda de DNS se tarda mucho en regresar. ¿Hay una manera sencilla que pueda establecer el tiempo de espera, por lo que si DNS no vuelve en <5s, puedo seguir adelante?

¿Fue útil?

Solución

getmxrr(substr($email,strrpos($email,'@')+1),$hosts);
if (!$hosts)
    echo 'No MX record found';

También puede probar esto para evitar el bloqueo (no hay opciones para ajustar el tiempo de espera getmxrr):

if (!@fsockopen(substr($email,strrpos($email,'@')+1),25,$errno,$errstr,5))
    echo 'No MX record found';

Otros consejos

Se puede usar getmxrr :

if (getmxrr($hostname, $mxhosts)) {
   // MX record exists
   var_dump($mxhosts);
}

búsquedas de DNS escala bien en las solicitudes repetidas. El servidor DNS más cercano en caché los valores alzó la vista por un período. El uso de un servidor caché DNS local puede mejorar el rendimiento, pero utilizará más memoria (un poco o mucho dependiendo del software y el número de direcciones en caché.

Si recuerdo correctamente los RFC, los anfitriones con un registro A debe ser destinos de correo electrónico válidas también. Sin embargo, los dominios con solamente un registro A no pueden tener un servidor de correo en esa dirección. (Lo mismo se aplica a los objetivos MX, pero esto debería ser mucho menos frecuente, y generalmente temporal.)

servicios de correo electrónico correctamente deben poner en cola el correo electrónico y vuelva a intentar la entrega en el tiempo. Si su sendmail no está haciendo esto, entonces usted debe comprobar su configuración. También tendrá que considerar qué hacer con direcciones de correo electrónico de correo electrónico a la que no se puede entregar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top