2011-12-05 14 views
5

Estoy enviando correos de php mail(): y deseo recibir un mensaje fallido si el envío falla a la destinatio.cómo saber si el correo php falló

$to = '[email protected]'; 
    $email_from = "[email protected]"; 

    $full_name = 'XXXX'; 
    $from_mail = $full_name.'<'.$email_from.'>'; 



    $subject = "testing sender name"; 
    $message = ""; 
    $message .= ' 
      <p><strong>This is only a test mail. Please do not reply.</strong><br /> 
    '; 
    $from = $from_mail; 

    //$headers = "" . 
    //   "Reply-To:" . $from . "\r\n" . 
    //   "X-Mailer: PHP/" . phpversion(); 

    $headers = "From:" . $from_mail . "\r\n" . 
       "Reply-To:" . $from_mail . "\r\n" . 
       "X-Mailer: PHP/" . phpversion(); 


    $headers .= 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";   

    if(!mail($to,$subject,$message,$headers)) 
    { 
     echo 'failed !!'; 
    } 

Pero aunque $to electrónico no hace existe, no está mostrando failed !!

+0

Si los encabezados De y Responder están configurados, todo lo que realmente puede esperar es recibir rebotes en esa dirección. También hay un encabezado 'Bounces-To:' separado que se puede especificar. –

+0

Esto se debe a que después de que PHP entrega el mensaje al servidor SMTP para que se lo entregue, no puede conocer directamente el éxito o el error de la entrega. El servidor SMTP no necesariamente entregará el mensaje de inmediato. Solo puedes esperar por los rebotes. –

+0

¿Prácticamente no hay forma de saber si el mensaje al correo falló o fue exitoso? – AssamGuy

Respuesta

3

Creo que lo que quiere es comprobar si hay un correo electrónico real, no solo un correo electrónico con formato válido. Así que le sugiero que eche un vistazo a este blog

+0

sí SeRPRo, exactamente. Verificare el blog ahora Gracias – AssamGuy

+0

@AssamGuy de nada :) – SERPRO

1

Pero a pesar de $ al correo embargo no existe, no se pudo mostrando !!

En realidad, el hecho de que el correo se entregue al servidor SMTP, no significa que se entregará al usuario final. No hay una manera fácil en PHP para verificar si se entrega.

5

El método de envío solo está enviando el correo. Si no recibe ningún error (por ejemplo, al no encontrar el servidor, etc.), volverá a funcionar correctamente. Usted no será capaz de saber que el correo haya aterrizado en la bandeja de entrada del destinatario a menos que cree un cierto código en torno mensajes devueltos, etc.

3

verificación del regreso de de mail

Devuelve VERDADERO si el correo era aceptado con éxito para la entrega, FALSO en caso contrario.

Es importante tener en cuenta que el hecho de que el correo electrónico sea aceptado para la entrega , NO significa que el correo llegue realmente al destino previsto .

Aunque el hecho de que está volviendo verdadera probablemente significa que su programa de correo está aceptando el mensaje, pero luego no cuando se trata de enviar a nadie ...

Debe ejecutar el $to a través de un validador compruebe que es una dirección válida y luego arroje un error si no es así, no confíe en mail() para filtrar cosas que ya sabe que son incorrectas, o que pueden ser fácilmente contraproducentes.

--update

Entonces echa un vistazo @SeRPRo, pero lo que tu tratando de hacer es un trabajo duro para poner a prueba mediante programación - su mucho más fácil y más fiable para enviar un correo electrónico, que requiere que el usuario haga clic en un enlace para verificar que sea real, intente consultar los servidores SMTP, que tienen un comportamiento diferente (léase: están divididos en diferentes grados). También tenga en cuenta que su comportamiento previsto (en cuanto al código) es difícil de diferenciar de un emisor de correo no deseado, por lo que no se sorprenda si considera que es difícil si evita la ruta del correo electrónico de verificación.

+0

, pero al igual que en el caso anterior, '$ to' es un correo electrónico válido pero no existe. ¿De modo que no podré encontrar si el correo a $ to ha fallado? – AssamGuy

0

Puede CC usted mismo como una forma de probar que está saliendo de la bandeja de salida.

+0

No te entendí ... puedes explicar un poco – AssamGuy

0

En mi caso, ayudó a establecer la ruta de retorno a través del parámetro de línea de comandos "-f", que se puede pasar en el parámetro $ additional_parameters de mail(). así que llamo a

mail($to, $subject, $message, $headers, "-f [email protected]"); 

...de acuerdo con algunos comentarios en http://www.php.net/manual/en/function.mail.php los host-inviroments reaccionan de forma diferente y tienen diferentes restricciones (la dirección puede necesitar ser registrada en la misma cuenta de host, o estar en el mismo dominio, lo mismo que el "De:" en la cabecera ... y así sucesivamente)

La página donde obtuve los rebotes para ser recibidos (con no de las restricciones mencionadas, como parece) está alojado en DomainFactory http://www.df.eu

0

uso phpmailer para enviar correo electrónico y establecer $ mail-> AddCustomHeader ('Return-path: [email protected]'); Esto enviará un correo electrónico de rebote a [email protected] si la identificación del destinatario no existe o el destinatario no recibe el correo electrónico en ningún otro caso.

Cuestiones relacionadas