para mail enviar correos correo configurar con php email open-source bouncedemail

enviar - mail php html



Manejo de correo rebotado en PHP-¿Alguna solución actualizada? (6)

Necesito hacer un poco de procesamiento de correo rebotado usando PHP. Revisar los correos electrónicos no es un problema, pero invertir los recursos para escribir nuestra propia biblioteca para analizar los correos electrónicos devueltos es muy indeseable.

Hay 3 soluciones PHP que he encontrado que se supone que son para procesar el correo rebotado, pero están desactualizadas y no se mantienen, por lo que puedo ver. (PHPList, PHPMailer-BMH, Bounce Handler @ PHPClasses.org)

¿Alguien sabe de un conjunto actualizado de reglas para procesar correos electrónicos devueltos? No necesito necesariamente ninguna lógica de manejo, incluso un solo conjunto de reglas actualizado sería satisfactorio.

Gracias por cualquier ayuda.


Al ser un veterano de 15 años de comunidades en línea, sé que responder una pregunta con una solución comercial con fines de lucro, con la que está afiliado el que responde, es caminar en una línea muy fina. Así que aquí voy, caminando por esa línea. Haré todo lo posible para abordar la pregunta específicamente. Comencemos con un descargo de responsabilidad estándar ...

DESCARGO DE RESPONSABILIDAD: Soy un principio en el servicio descrito a continuación.

pero invertir los recursos en escribir nuestra propia biblioteca para analizar los correos electrónicos devueltos es muy indeseable.

Sí, escribir sus propias bibliotecas no es divertido para la mayoría (pero somos pobres, almas retorcidas y no tenemos nada mejor que hacer), considerando que la biblioteca que usted escribe o incluye puede considerarse obsoleta pocos días después de sus modificaciones.

¿Alguien sabe de un conjunto actualizado de reglas para procesar correos electrónicos devueltos? No necesito necesariamente ninguna lógica de manejo, incluso un solo conjunto de reglas actualizado sería satisfactorio.

El mantenimiento de tales bibliotecas consume mucho tiempo, y una vez que consume mucho tiempo, tales bibliotecas a menudo se abandonan o se actualizan escasamente. Por lo general, así es como nacen las soluciones comerciales.

Soy un gran admirador de Open Source, y no hay duda de que personalmente me he beneficiado enormemente a lo largo de los años. Para la gran mayoría de ustedes que leen esto, las opciones anteriores son perfectamente suficientes, ya que muchos de ustedes son capaces de desarrollar las soluciones que necesitan o modificar las herramientas disponibles para satisfacer sus necesidades, y tienen el tiempo para hacerlo.

Sin embargo, para aquellos de ustedes que no desean construir sus propias aplicaciones, depurarlas y solucionarlas, actualicen las definiciones de procesamiento de correo electrónico de manera consistente y, a menudo, InboxResponse.com ofrece el proceso de rebote de correo electrónico como una solución SAAS. Es:

  • Actualizado a menudo y consistentemente
  • Perfecto para aquellos de ustedes que solo quieren algo que funcione
  • Puede integrarse en cualquier sistema de correo existente que use actualmente, en cuestión de minutos.
  • Admite seguimiento de entregas, procesamiento de rebote, niveles múltiples de procesamiento de rebote suave (correos electrónicos que no se pueden entregar temporalmente), listas de correo ilimitadas, estadísticas, gráficos y más.

Una versión de prueba gratuita está disponible en la siguiente URL: https://inboxresponse.com/free-trial/

Puede que no haya sido exactamente lo que estaba buscando (una biblioteca de código abierto siempre actualizada), pero no creo que esté exactamente disponible lo que está buscando.

Espero que ayude a alguien!


Así es como lo hice una vez antes. Puede capturar al menos más del 70% de los correos de rebote de forma constante.

En los correos electrónicos que se envían, coloque un encabezado personalizado (como "x-email-check-id") para tener un identificador único para cada correo electrónico que se envía (tal vez crear un GUID y almacenarlo en la base de datos para cada correo electrónico)

En el extremo del servidor, escriba un trabajo cron para descargar periódicamente los correos electrónicos de la dirección de rebote, y busque este encabezado en el mensaje de respuesta. De esta forma, puede hacer coincidir el correo de rebote con el correo electrónico enviado. De esta forma, puede establecer que este correo electrónico se recupera de su envío y no es un correo electrónico no deseado.

Después de eso, busque en el contenido del correo electrónico palabras clave específicas para determinar el motivo del rebote. Esta lista de palabras clave debe actualizarse a menudo a medida que los servidores de correo electrónico más recientes devuelven texto diferente. Pero aquí está la lista que utilicé.

$Email__Full[] = ''databytes limit''; $Email__Full[] = ''exceeded dropfile size''; $Email__Full[] = ''exceeded email quota''; $Email__Full[] = ''exceeded storage''; $Email__Full[] = ''exceeding receiving limits''; $Email__Full[] = ''exceeds the maximum size''; $Email__Full[] = ''folder is full''; $Email__Full[] = ''mail system full''; $Email__Full[] = ''mailbox exceeds allowed size''; $Email__Full[] = ''mailbox full''; $Email__Full[] = ''mailbox has exceeded the limit''; $Email__Full[] = ''mailbox is full''; $Email__Full[] = ''mail box full''; $Email__Full[] = ''out of disk space''; $Email__Full[] = ''out of diskspace''; $Email__Full[] = ''over disk quota''; $Email__Full[] = ''over quota''; $Email__Full[] = ''over the allowed quota''; $Email__Full[] = ''problem with the recipient/'s mailbox''; $Email__Full[] = ''quota exceeded''; $Email__Full[] = ''quota violation''; $Email__Full[] = ''space has been used up''; $Email__Full[] = ''space not enough''; $Email__Full[] = ''status: 5.2.1''; $Email__Full[] = ''status: 5.2.2''; $Email__Full[] = ''status: 5.2.3''; $Email__Full[] = ''status: 5.3.3''; $Email__NotExist[] = ''/var/mail/nobody''; $Email__NotExist[] = ''550 5.1.1''; $Email__NotExist[] = ''account expired''; $Email__NotExist[] = ''account inactive''; $Email__NotExist[] = ''account suspended''; $Email__NotExist[] = ''address is administratively disabled''; $Email__NotExist[] = ''address is not recognized''; $Email__NotExist[] = ''address is rejected''; $Email__NotExist[] = ''address not recognized''; $Email__NotExist[] = ''address rejected''; $Email__NotExist[] = ''bad destination email address''; $Email__NotExist[] = ''cname lookup failed''; $Email__NotExist[] = ''connection refused''; $Email__NotExist[] = ''couldn/'t find any host''; $Email__NotExist[] = ''could not be found''; $Email__NotExist[] = ''deactivated mailbox''; $Email__NotExist[] = ''delivery time expired''; $Email__NotExist[] = ''destination server not responding''; $Email__NotExist[] = ''disabled or discontinued''; $Email__NotExist[] = ''does not exist''; $Email__NotExist[] = ''does not like recipient''; $Email__NotExist[] = ''doesn/'t have a yahoo.com account''; $Email__NotExist[] = ''doesn/'t have a yahoo.com.sg account''; $Email__NotExist[] = ''domain is for sale''; $Email__NotExist[] = ''find a mail exchanger''; $Email__NotExist[] = ''find any host named''; $Email__NotExist[] = ''following address(es) failed''; $Email__NotExist[] = ''host unknown''; $Email__NotExist[] = ''i couldn/'t find any host by that name''; $Email__NotExist[] = ''illegal user''; $Email__NotExist[] = ''in the queue too long''; $Email__NotExist[] = ''inactive recipient''; $Email__NotExist[] = ''inactive user''; $Email__NotExist[] = ''incorrectly addressed''; $Email__NotExist[] = ''invalid recipient''; $Email__NotExist[] = ''invalid user''; $Email__NotExist[] = ''isn/'t in my control/locals file''; $Email__NotExist[] = ''mailbox not available''; $Email__NotExist[] = ''mailbox not found''; $Email__NotExist[] = ''mailbox unavailable''; $Email__NotExist[] = ''mail is looping''; $Email__NotExist[] = ''message is looping''; $Email__NotExist[] = ''name is not recognized''; $Email__NotExist[] = ''name not found''; $Email__NotExist[] = ''name not recognized''; $Email__NotExist[] = ''no local mailbox''; $Email__NotExist[] = ''no longer accepts mail''; $Email__NotExist[] = ''no longer an employee''; $Email__NotExist[] = ''no longer on server''; $Email__NotExist[] = ''no longer valid''; $Email__NotExist[] = ''no mailbox''; $Email__NotExist[] = ''no route found to domain''; $Email__NotExist[] = ''no such user''; $Email__NotExist[] = ''none of the mail servers for the destination domain has so far responded''; $Email__NotExist[] = ''no valid host''; $Email__NotExist[] = ''no valid recipients''; $Email__NotExist[] = ''not a valid mailbox''; $Email__NotExist[] = ''not listed''; $Email__NotExist[] = ''not listed in domino''; $Email__NotExist[] = ''possible mail loop''; $Email__NotExist[] = ''recipient cannot be verified''; $Email__NotExist[] = ''recipient unknown''; $Email__NotExist[] = ''recipients are invalid''; $Email__NotExist[] = ''recipnotfound''; $Email__NotExist[] = ''relaying denied''; $Email__NotExist[] = ''several matches found in domino''; $Email__NotExist[] = ''status: 5.1.1''; $Email__NotExist[] = ''status: 5.1.3''; $Email__NotExist[] = ''status: 5.1.4''; $Email__NotExist[] = ''status: 5.1.6''; $Email__NotExist[] = ''status: 5.1.7''; $Email__NotExist[] = ''this user doesn/'t have a yahoo''; $Email__NotExist[] = ''too many hops''; $Email__NotExist[] = ''unable to deliver''; $Email__NotExist[] = ''unable to relay''; $Email__NotExist[] = ''unknown address''; $Email__NotExist[] = ''unknown recipient''; $Email__NotExist[] = ''unknown user''; $Email__NotExist[] = ''unrouteable address''; $Email__NotExist[] = ''user doesn/'t have''; $Email__NotExist[] = ''user unknown''; $Email__NotExist[] = ''x-notes; 550 5.1.1''; $Email__NotExist[] = ''x-notes; recipient/'s domino directory''; $Email__NotExist[] = ''$B%G%#%l%/%H%j$K$O8+$D$+$j$^$;$s!#''; //* Returned from japanese domino . Somehow means directory is not found. $Email__Banned[] = ''_spam_''; $Email__Banned[] = ''550 5.7.1''; $Email__Banned[] = ''550 access denied''; $Email__Banned[] = ''550 no thanks''; $Email__Banned[] = ''550 spam''; $Email__Banned[] = ''554 5.7.0''; $Email__Banned[] = ''554 5.7.1''; $Email__Banned[] = ''554 denied''; $Email__Banned[] = ''554 message does not conform to standards''; $Email__Banned[] = ''554 message refused''; $Email__Banned[] = ''571 message Refused''; $Email__Banned[] = ''activated my anti-spam features''; $Email__Banned[] = ''administrative prohibition''; $Email__Banned[] = ''appears to contain uce/spam''; $Email__Banned[] = ''appears to be spam''; $Email__Banned[] = ''appears to be unsolicited''; $Email__Banned[] = ''banned for spamming''; $Email__Banned[] = ''blackholed by uribl.com''; $Email__Banned[] = ''blacklisted by surbl''; $Email__Banned[] = ''blocked by filter''; $Email__Banned[] = ''blocked by kbas system''; $Email__Banned[] = ''blocked by our content filter''; $Email__Banned[] = ''blocked by spamsssassin''; $Email__Banned[] = ''blocked by the recipient''; $Email__Banned[] = ''blocked by user/'s personal blacklist''; $Email__Banned[] = ''blocked due to spam like qualities''; $Email__Banned[] = ''blocked using spam pattern''; $Email__Banned[] = ''blocked using uceprotect''; $Email__Banned[] = ''body part contains disallowed string''; $Email__Banned[] = ''classified as **spam**''; $Email__Banned[] = ''content blacklist''; $Email__Banned[] = ''content filter rejected the message''; $Email__Banned[] = ''consider the message to be spam''; $Email__Banned[] = ''considered spam''; $Email__Banned[] = ''contains spam''; $Email__Banned[] = ''content filter rejection''; $Email__Banned[] = ''content rejected''; $Email__Banned[] = ''denied by policy''; $Email__Banned[] = ''detected your message as spam''; $Email__Banned[] = ''does not accept UCE''; $Email__Banned[] = ''domain is banned''; $Email__Banned[] = ''email abuse detected''; $Email__Banned[] = ''error 553''; $Email__Banned[] = ''help_spam_16.htm''; $Email__Banned[] = ''high on spam scale''; $Email__Banned[] = ''http://www.google.com/mail/help/bulk_mail.html''; $Email__Banned[] = ''http://www.surbl.org/lists.html''; $Email__Banned[] = ''identified as spam''; $Email__Banned[] = ''identified your message as spam''; $Email__Banned[] = ''listed in multi.surbl.org''; $Email__Banned[] = ''looks like spam''; $Email__Banned[] = ''mail rejected by windows live hotmail for policy reasons''; $Email__Banned[] = ''message bounced by administrator''; $Email__Banned[] = ''message content rejected, ube''; $Email__Banned[] = ''message contains a virus or other harmful content''; $Email__Banned[] = ''message has too high spam probability''; $Email__Banned[] = ''message is blacklisted''; $Email__Banned[] = ''message refused''; $Email__Banned[] = ''no spam here''; $Email__Banned[] = ''not accepted here''; $Email__Banned[] = ''not in the whitelist''; $Email__Banned[] = ''not rfc compliant''; $Email__Banned[] = ''permanently rejected message''; $Email__Banned[] = ''policy violation''; $Email__Banned[] = ''refused mail service''; $Email__Banned[] = ''reject spam mail''; $Email__Banned[] = ''reject the mail''; $Email__Banned[] = ''rejected by filter''; $Email__Banned[] = ''rejected as spam''; $Email__Banned[] = ''rejected by 35 antiSpam system''; $Email__Banned[] = ''rejected by antispam system''; $Email__Banned[] = ''rejected by cloudmark anti-spam''; $Email__Banned[] = ''rejected by our Spam Filter''; $Email__Banned[] = ''rejected by spam filtering''; $Email__Banned[] = ''rejected by surbl''; $Email__Banned[] = ''rejected by the anti-spam system''; $Email__Banned[] = ''rejected due to security policies''; $Email__Banned[] = ''rejected for policy reasons''; $Email__Banned[] = ''rejected for spam''; $Email__Banned[] = ''requires that you verify''; $Email__Banned[] = ''scored as spam''; $Email__Banned[] = ''sender address verification''; $Email__Banned[] = ''sender was rejected''; $Email__Banned[] = ''spam detected by spamassassin''; $Email__Banned[] = ''spam filter pattern''; $Email__Banned[] = ''spam-like characteristics''; $Email__Banned[] = ''spam mail detected''; $Email__Banned[] = ''spam mail refused''; $Email__Banned[] = ''spam message was blocked''; $Email__Banned[] = ''spam rejected''; $Email__Banned[] = ''spam score too high''; $Email__Banned[] = ''status: 5.7.1''; $Email__Banned[] = ''support.proofpoint.com''; $Email__Banned[] = ''suspected spam''; $Email__Banned[] = ''suspicious url in message body''; $Email__Banned[] = ''temporarily deferred''; $Email__Banned[] = ''transaction failed''; $Email__Banned[] = ''unacceptable content''; $Email__Banned[] = ''unacceptable mail content''; $Email__Banned[] = ''unsolicited bulk e-mail''; $Email__Banned[] = ''unsolicited bulk email''; $Email__Banned[] = ''unsolicited email is refused''; $Email__Banned[] = ''validate recipient email''; $Email__Banned[] = ''will be deleted from queue''; $Email__OutOffice[] = ''away for a vacation''; $Email__OutOffice[] = ''away from the office''; $Email__OutOffice[] = ''not in office''; $Email__OutOffice[] = ''on leave''; $Email__OutOffice[] = ''on vacation''; $Email__OutOffice[] = ''out of office''; $Email__OutOffice[] = ''out of the office'';



El manejo de rebotes no es trivial, ya que necesita lidiar con una gran cantidad de servidores y respuestas diferentes. Esto incluye aquellos servidores que están mal configurados y rebota porque su correo electrónico / host / IP ha sido incluido en la lista negra / spam. Y hay toneladas de rebotes debido a respuestas automáticas "fuera de la oficina".

Una solución simple que conozco es colocar encabezados propios en el mensaje que identifican la dirección del receptor y el envío concreto (un token). Cuando rebota, el rebote se puede verificar en base a esto.

Otra solución es codificar información adicional en la dirección del remitente y analizarla en consecuencia para los rebotes. Para esto, necesita saber cómo funciona el correo electrónico, que generalmente es útil si lo necesita con rebotes.

  • ¿Manejo de Bounce Email con PHP?
  • Herramienta para analizar registros SMTP que detecta rebotes
  • ¿Cómo verificar si existe una dirección de correo electrónico sin enviar un correo electrónico?
  • Especificar la dirección de devolución de correo electrónico

Hay una gran respuesta aquí en SO (pero no la he encontrado para esta respuesta) que entra en muchos detalles sobre el tema. Si lo encuentro, lo agregaré.

El punto general es que no conozco muchas herramientas basadas en PHP para manejar rebotes, sé que PHPList (componentes de PHP para el manejo de listas de correo) tiene algo en su repositorio:

Editar: la pregunta relacionada con la respuesta muy informativa es:

  • ¿Cómo enviar 100.000 correos electrónicos semanalmente?

Editar: No es mucho, solo algunos enlaces:

Me pregunto por qué no hay un estándar en el rebote del correo electrónico que te permita identificar fácilmente los rebotes y el motivo del rebote, ¿o no? (como un RFC)

Existe RFC3834 - Recomendaciones para respuestas automáticas al correo electrónico que se actualizan mediante el mecanismo de notificación de tamizado RFC5436: mailto .

El rebote también se discute en parte en el Protocolo simple de transferencia de correo RFC5321 , que claramente da una razón por la cual un MTA debe informar si un mensaje no puede ser entregado.

El principal problema es que la dirección de rebote (el remitente) no se puede verificar en SMTP, por lo que enviar un mensaje de rebote conlleva el problema de que probablemente le llegue a una persona incorrecta (Backscatter Spam).

Por lo tanto, un envío de correo confiable no solo verifica los rebotes, sino que también hace más con SMTP para obtener un cierto nivel de calidad. Consulte:

Toda la página de Wikipedia del informe No entrega podría ser interesante para una primera vista de la imagen.


Soy un gran admirador de la biblioteca de ezComponents, que incluye un componente de correo que puede manejar tanto el envío como el análisis de correo (así como también la conexión a su MTA para recuperarlo. http://ezcomponents.org/docs/tutorials/Mail#mail-parsers

Al leer los documentos, parece que debería estar a la altura de su tarea.


es más fácil de lo que piensas escribir esto tú mismo.

Simplemente configura la ruta de rebote en los encabezados. Luego configure esa dirección de correo electrónico para ejecutar un script de procesamiento. obviamente necesitarías enviar algún tipo de identificación de usuario.

He usado PHPList antes y me parece bien, hay mejores servicios para hacer lo que necesita, pero obviamente hay un costo para ellos.

Los rebotes ocurren cuando la dirección no existe o el servidor de correo la envía de regreso. Algunos servidores de correo no responderán (como una característica de seguridad) por lo que la precisión no será la mejor.

Muchas de las bibliotecas autónomas ofrecen características adicionales que determinan los enlaces en los que se hizo clic y quiénes descifraron quién leyó el correo electrónico. etc

estas cosas son fáciles de lograr pero toman recursos.

Avíseme si hay algo más con lo que necesite ayuda