¿Manejo de Bounce Email con PHP?
(13)
¿Por qué no crear un [email protected] y usar php para leer esos correos electrónicos y hacer lo que quieras?
Editar Después de su comentario: Por favor chec my link whcih tiene un script php que le enseñará cómo abrir y enviar un correo electrónico utilizando php y leer los correos electrónicos. Puede usar este scrip para verificar los mensajes de error.
Aquí está mi escenario:
Tengo 2 cuentas de correo electrónico: [email protected] y [email protected].
Deseo enviar un correo electrónico a todos mis usuarios con [email protected] pero luego responder a [email protected] (hasta aquí, mi script PHP puede manejarlo).
Cuando el correo electrónico no se puede enviar, se envía a [email protected], el mensaje de error podría ser 553 (correo electrónico no existente ...), etc.
Mi pregunta es: ¿cómo dirijo todos esos correos electrónicos de rebote (correos electrónicos no enviados) a [email protected] a través de un script de manejo para verificar los códigos de error de rebote?
¿Qué lenguaje de programación debería usar para el "guión de manejo"?
¿Cómo se vería el "guión de manejo"? ¿Puedes dar una muestra?
en otras palabras:
¿Cuáles son los procedimientos que debo seguir para manejar el correo electrónico de rebote?
Aquí hay una solución enlatada para procesar los rebotes usando IMAP.
Cambié el encabezado Return-Path de mi instancia de Mail a un bounce [email protected]
El único método lo suficientemente fácil de considerar viable es el siguiente, que comprueba a través de POP3 la bandeja de entrada dedicada y puede manejar cada correo electrónico según el mensaje recibido.
$inst=pop3_login(''mail.xxxxxx.us'',''110'',''[email protected]'',''pass'');
$stat=pop3_stat($inst);
//print_r($stat);
if($stat[''Unread'']>0){
echo "begin process<br><br>";
$list=pop3_list($inst);
//print_r($list);
foreach($list as $row){
if(strpos($row[''from''],''MAILER-DAEMON'')!==FALSE){
$msg=imap_fetchbody($inst,$row[''msgno''],''1'');
if(strpos($msg,''550'')!==FALSE){
echo "handle hard bounce".$msg."<br><br>";
//WHATEVER HERE TO PROCESS BOUNCE
}
}
else{
$msg=imap_fetchbody($inst,$row[''msgno''],''1'');
echo "not from my server. could be spam, etc.".$msg."<br><br>";
//PROBABLY NO ACTION IS NEEDED
}
//AFTER PROCESSING
//imap_delete ( resource $imap_stream , int $msg_number [, int $options = 0 ] )
//commented out because I havent implemented yet. see IMAP documentation
}
}
else{
echo "no unread messages";
}
//imap_close ( resource $imap_stream [, int $flag = 0 ] )
//commented out because I havent implemented yet. see IMAP documentation.
//flag: If set to CL_EXPUNGE, the function will silently expunge the mailbox before closing, removing all messages marked for deletion. You can achieve the same thing by using imap_expunge()
function pop3_login($host,$port,$user,$pass,$folder="INBOX",$ssl=false)
{
$ssl=($ssl==false)?"/novalidate-cert":"";
return (imap_open("{"."$host:$port/pop3$ssl"."}$folder",$user,$pass));
}
function pop3_stat($connection)
{
$check = imap_mailboxmsginfo($connection);
return ((array)$check);
}
function pop3_list($connection,$message="")
{
if ($message)
{
$range=$message;
} else {
$MC = imap_check($connection);
$range = "1:".$MC->Nmsgs;
}
$response = imap_fetch_overview($connection,$range);
foreach ($response as $msg) $result[$msg->msgno]=(array)$msg;
return $result;
}
function pop3_retr($connection,$message)
{
return(imap_fetchheader($connection,$message,FT_PREFETCHTEXT));
}
function pop3_dele($connection,$message)
{
return(imap_delete($connection,$message));
}
Deberías mirar SwiftMailer. Está completamente escrito en PHP y tiene soporte para correos electrónicos de "rebote". http://swiftmailer.org/
Deje que los correos electrónicos reboten en una dirección que es realmente una dirección electrónica (con detalles de inicio de sesión, etc.).
Haga un script php que se ejecute cada x minutos (por ejemplo, con un trabajo cron). Este script php debe hacer lo siguiente. - Recuperar todos los correos electrónicos de la caja (usar, por ejemplo, Zend Mail ) - Verificar el error en el mensaje (por ejemplo, buscándolo con expresiones regulares) - Hacer lo que sea necesario.
Si desea saber específicamente quién se recuperó, puede usar direcciones de rebote específicas del usuario. (Ver por ejemplo este sitio )
El mejor escenario es poder clasificar el tipo de rebote: suave, difícil ...
lo que usamos es BounceStudio . Necesitas compilarlo y agregar las bibliotecas php ... nada difíciles. Usted tiene la versión gratuita y paga de ese producto
una vez que detectamos el tipo de rebote utilizamos PEAR :: MAIL :: MIME para buscar encabezados personalizados que agregamos previamente al correo electrónico, digamos:
X-user-id: XXXXX
X-campaign-id: YYYYYY
X-recipient-id: SSSSSSSSS
de esta forma podemos conocer el destinatario real al que le enviamos el correo electrónico.
Espero que esto te ayude! para que me ayudes a llegar a los 500 puntos: P
En el comando php mail http://php.net/mail
usa el quinto parámetro y agrega "-f" a él.
Entonces, usa "-f [email protected]" como el parámetro
el administrador del boletín phpList usa esto para administrar rebotes.
Una vez que los rebotes se llenan en el buzón, puede POP y procesarlos. Esa es la forma más fácil de lidiar con ellos, en lugar de manejarlos cuando llegan.
Estaba buscando la respuesta a la misma pregunta. Hay más partes de la pregunta y más opciones.
Para manejar el correo electrónico rebotado, encontré una clase de PHP , puramente en PHP, sin necesidad de compilación o instalación de software adicional si tiene un sitio con PHP. Es muy fácil de usar.
Si está utilizando cPanel, o InterWorx / SiteWorx, puede configurar algunas de las direcciones para manejar los correos electrónicos recibidos con un script, por ejemplo un script PHP, para que pueda escribir su propio manejo con la ayuda de la clase mencionada. O, por supuesto, todavía puede crear cuentas de correo electrónico ordinarias y recuperar los correos a través de POP3 o IMAP, y luego interpretarlos. Creo que el primero es mejor, porque es directo, no tienes que usar canales adicionales, como IMAP. Por supuesto, si no puede configurar su servidor de correo, o no sabe cómo hacerlo, entonces el primero es mejor para usted.
¡Buena suerte! :)
Estamos usando Procmail para filtrar este tipo de correos. Después de examinar algunas de las soluciones ya mencionadas aquí, terminamos con una receta simple de Procmail para detectar mensajes de rebote. Dependiendo de la precisión que necesita, esto podría ser aplicable a su situación.
Para más detalles, mira esta entrada de blog .
He tenido bastante mala suerte buscando una solución de PHP para esto, pero encontré este producto que hace justo lo que necesitaba.
se ejecuta como una aplicación nativa mac / win, pero cumple su función.
http://www.maxprog.com/site/software/internet-marketing/email-bounce-handler_sheet_us.php
Quizás es un poco tarde para la respuesta, pero siempre puedes probar algo nuevo. Tuve la semana pasada una tarea como esta, y utilicé BOUNCE HANDLER Class, de Chris Fortune, que corta el rebote en arreglos asociativos - http://www.phpclasses.org/browse/file/11665.html
Esto se usará después de que te conectes al POP3 con un programa de correo para obtener los rebotes de él, luego lo analizará en pedazos con esto, y si tiene el estado que buscaste, realiza las acciones necesarias.
Aclamaciones.
Si tiene un buzón POP3 configurado para [email protected]
, puede usar un script de cliente POP3 escrito en PHP para recuperar los mensajes y verificar si hay mensajes que no se pueden entregar.
Siempre puede usar algo como http://cloudmailin.com para reenviar los correos electrónicos devueltos a su servidor php a través de http. Sin embargo, puede ser mejor con un servicio dedicado a enviar correos electrónicos y usar su API para recuperar los detalles del rebote.
Tuve el mismo problema, la situación exacta. De forma predeterminada, mi servidor de correo está enviando todos mis correos devueltos a la misma cuenta desde la que se envió originalmente, con el mensaje automático "Falló la entrega del correo: devolver el mensaje al remitente" .
Realmente no quiero saber por qué fue devuelto, tuve tantas transacciones de correos que solo quería eliminar los malos. No tiene tiempo para verificar una regla específica como Doestn Exist, Unavailable, etc ,,, solo desea marcar para eliminarla y continuar.
Los correos de rebote son tan triviales, ya que necesita lidiar con muchos tipos diferentes de servidores y respuestas. Cada escenario de software antispam o sistema operativo puede enviar un código de error diferente con el correo electrónico devuelto.
Te recomiendo que leas y descargues esta versión corregida de depuración de Manejo de correo electrónico devuelto - USO DE PHPMAILER-BMH Y AUTHSMTP desde KIDMOSES aquí http://www.kidmoses.com/blog-article.php?bid=40 si quieres configurar IMAP y envíe sus propios encabezados personalizados, envíelos a [email protected] y luego cruce los dedos para ver si el script capta los encabezados que envió escritos en el correo rebotado. Lo intenté, funciona.
Pero si quiere seguir mi solución rápida y fácil que resolvió mi problema, aquí está el secreto.
1 - Descargue la mejor versión del sitio de KIDMOSES o de mi sitio, solo en caso de que KIDMOSES quiera mudarse a otro lugar http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip
2 - La variable que contiene el texto de su correo devuelto es $ body y contiene el correo electrónico mal devuelto (ASÍ ES UN ARREGLO MULTIDIMENSIONAL). (También contiene el correo de sus servidores y otros correos DNS, pero estamos buscando el MAL envuelto por CORREO.
3 - Debido a que su PROPIO SERVICIO le está devolviendo el correo electrónico devuelto, entonces no es probable que cambie su formato y encabezados propios, enviando correos electrónicos devueltos, para que pueda elegir el orden de la matriz de correo electrónico devuelto devuelto. En mi caso siempre fue la misma plantilla de formato. (A menos que cambie los sistemas o proveedores)
4 - Examinamos ese $ body y buscamos todas las variables de cadena de correo electrónico y las extraemos posicionándolas en una matriz bidimensional llamada $ matches
5 - Seleccionamos la posición de la matriz, imprimiendo la matriz usando print_r (valores de matriz ($ coincidencias));
6 - Este es el código que necesita modificar. Está alrededor de la línea 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 "<font color = red>".$matches[0][0]."</font><br>";
break;
Así que nos olvidamos de los encabezados devueltos y nos concentramos en los correos electrónicos malos. Puedes destacarlos, puedes utilizarlos en MySQL o procesar lo que quieras hacer.
IMPORTANTE Comente los echos en callback_echo.php en el directorio de muestras; de lo contrario, obtendrá toda la basura antes de la impresión.
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 "<br>".$msgnum . '': '' . $rule_no . '' | '' . $rule_cat . '' | '' . $bounce_type . '' | '' . $remove . '' | '' . $email . '' | '' . $subject . '' | '';
//echo ''Custom Header: '' . $cheader . " | ";
//echo ''Bounce Message: '' . $rule_msg . " | ";
return true;
}
MI SALIDA
Connected to: mail.chasqui.market ([email protected])
Total: 271 messages
Running in disable_delete mode, not deleting messages from mailbox
[email protected]
...
[email protected]
Closing mailbox, and purging messages
Read: 271 messages
0 action taken
271 no action taken
0 messages deleted
0 messages moved