Manejo de correos rebotados o retornados en programacion PHP de una lista de envío en MySQL. » Chasqui Market ©
REGÍSTRATE AQUÍ
Pueblo Libre es la red de Seguridad Ciudadana para todos los vecinos de Pueblo Libre iniciando Enero 2,019.

Manejo de correos rebotados o retornados en programacion PHP de una lista de envío en MySQL.

Si tienes este problema, aqui una solución fácil para removerlos usando PHP. Como sabemos, muchos de los correos que envías, son retornados por tu servidor de correos y llegan a tu bandeja de entrada con el mensaje "Mail delivery failed: returning message to sender".

Muchas de las razones son comunes y otras desconocidas.(Ej mal tipeados, no existen, etc), Si lo que deseas es simplemente identificar los correos rebotados, y ahorrarte el tiempo de seleccionar la categoría del rebote, entonces simplemente debes extraerlos de ese correo rebote y marcarlos, exportarlos o eliminarlos de tu lista o base de datos.

Debido a la cantidad de servidores y marcas de software de manejo de envío de correos, es casi imposible determinar las razones por la cual ese correo ha sido rebotado, lo que vale es que rebotó y debes hacer algo al respecto.

Recomiendo para esto, leer y bajar el programa script en PHP para que lo instales en tu servidor, aquí dos enlaces interesantes - USING PHPMAILER-BMH AND AUTHSMTP from KIDMOSES here http://www.kidmoses.com/blog-article.php?bid=40 esto si deseas configurar un IMAP configurando una cuenta no-reply@tudominio.com y enviando tus propios headers en el correo para que los puedas atrapar una vez que retornen como malos. Funciona!

Pero si deseas una solución simple y rápida, aquí les cuento el secreto:

1 - Download (bajar)la versión mejorada desde ese enlace de la página de KIDMOSES adjunto, o simplemente desde aquí http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip

2 - Como el texto de tu correo rebotado está en la variable $body que a su vez contiene el correo rebotado, esta variable se convierte en un ARRAY MULTIDIMENSIONAL. Este array también contiene otras informaciones de tu servidor DNS el cual no deseas tocar, sólo deseas ubicar el correo rebotado.

3 - Como tu servidor de correos, retorna con el mismo formato tus correos rebotados, entonces la variable se mantiene en la misma posición en todos los correos rebotados haciendo fácil su ubicación. (Esto a menos que cambies de proveedor de internet, SMTP o sistema de envios de correos)

4 - Entonces miramos dentro de lo que hay en la variable $body y buscamos a todos los que contienen correos del formato xxx@yyy.zzz y los colocamos en una variable array multidimensional (dos dimensiones) llamado $matches

5 - Finalmente seleccionamos la posicion del correo defectuoso rebotado usando este comando temporal para que salgan en la pantalla print_r( array_values( $matches ));

6 - Esta es la linea de codigo que debes modificar y esta por la ubicacion 500 del archivo class.phpmailer-bmh.php

// process bounces by rules
$result = bmhDSNRules($dsn_msg,$dsn_report,$this->debug_dsn_rule);
} elseif ($type == 'BODY') {
$structure = imap_fetchstructure($this->_mailbox_link,$pos);
switch ($structure->type) {
case 0: // Content-type = text
$body = imap_fetchbody($this->_mailbox_link,$pos,"1");
$result = bmhBodyRules($body,$structure,$this->debug_body_rule);

//MY RULE IT WORKS at least on my return mail system..
$pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i';
preg_match_all($pattern, $body, $matches);
//print_r( array_values( $matches )); //To select array number of bad returned mail desired, usually is 1st array $matches[0][0]
echo "".$matches[0][0]."
";

break;

Entonces nos olvidamos de los headers y nos concentramos en borrar los correos rebotados de nuestras bases de datos.

IMPORTANTE : Comentar los echos en callback_echo.php en el directorio ejemplos sino te imprimirá toda la basura anterior.

function callbackAction ($msgnum, $bounce_type, $email, $subject, $xheader, $cheader, $remove, $rule_no=false, $rule_cat=false, $rule_msg='', $totalFetched=0) {
$displayData = prepData($email, $bounce_type, $remove);
$bounce_type = $displayData['bounce_type'];
$emailName = $displayData['emailName'];
$emailAddy = $displayData['emailAddy'];
$remove = $displayData['remove'];
//echo "
".$msgnum . ': ' . $rule_no . ' | ' . $rule_cat . ' | ' . $bounce_type . ' | ' . $remove . ' | ' . $email . ' | ' . $subject . ' | ';
//echo 'Custom Header: ' . $cheader . " | ";
//echo 'Bounce Message: ' . $rule_msg . " | ";

return true;
}


MI RESULTADO

Connected to: mail.chasqui.market (bounce@chasqui.market)
Total: 271 messages
Running in disable_delete mode, not deleting messages from mailbox

kty2001us@starmedia.com

...

entv@nuevoface.com

Closing mailbox, and purging messages
Read: 271 messages
0 action taken
271 no action taken
0 messages deleted
0 messages moved
Last update on Diciembre 1, 3:41 am by Chasqui (Admin).
Archivos Adjuntos
El tiempo está en GMT. En estos momentos son las 5:20 am.
TOP