rails proyecto libro crear ruby-on-rails email ruby-on-rails-4 email-threading griddler

ruby on rails - proyecto - Rails Griddler y conversación/hilos de correo electrónico



libro de rails (2)

Hay una nueva gema llamada Msgthr , que es un algoritmo de JWZ de implementación. No se trata de temas, remitentes o fechas coincidentes, por lo que no es exactamente lo que estás buscando, pero creo que es un buen comienzo.

Lo mejor de Msgthr es que es agnóstico en cuanto a contenedores, por lo que no tiene que instalar requisitos como TMail , como en el puerto ruby ​​de Frederik Dietz. Esto también significa que se puede utilizar para otros tipos de comunicaciones.

Aquí hay algunos ejemplos de código, dada una lista de mensajes, agrupémoslos en hilos:

thr = Msgthr.new threads = {} [1, 11, 12, 2, 21, 211].each{ |id| threads[id] = [id]} my_add = lambda do |id, refs, msg| thr.add(id, refs, msg) do |parent, child| threads[child.mid] = threads[parent.mid] end end # Create the following structure # 1 # / # | 1.1 # / # 1.2 # 2 # / # 2.1 # / # 2.1.1 my_add.call(1, nil, ''1'') my_add.call(11, [1], ''1.1'') my_add.call(12, [1], ''1.2'') my_add.call(2, nil, ''2'') my_add.call(21, [2], ''2.1'') my_add.call(211, [21], ''2.1.1'') thr.thread! thr.rootset.each do |cnt| threads[cnt.mid][0] = cnt.msg end

Divulgación: Soy uno de los contribuyentes a la gema.

Estoy tratando de encontrar la mejor manera de conectar / enhebrar una cadena de correos electrónicos. Esto parece ser un problema tan común que me sorprendió no poder encontrar fácilmente información sobre cómo otras personas lo han tratado. Lo único que encontré fue una publicación sobre el subprocesamiento de JWZ que parecía más preocupada por analizar un hilo en un correo electrónico. Me preguntaba si alguien podría señalarme algunas soluciones actuales.

Estoy utilizando la gema de griddler deoughtbot para procesar los correos electrónicos entrantes en un Message(s) modelo Message(s) y un Contact(s) modelo Contact(s) , y tengo un tercer modelo para almacenar respuestas, por ejemplo, Reply .

Mi pensamiento actual es unirlos por el contacto único y la línea de asunto. Pero de nuevo la línea de asunto cambiará ligeramente. por ejemplo, desde "Este tema" -> "Re: re: Este tema" ¿Podría usar expresiones regulares para intentar analizar "re:" o podría usar algo como amatch para hacer comparaciones de cadenas?

Pero, de nuevo, ¿qué hacer con el mismo tema que aparece para el mismo usuario 2 meses después? También agregue algo de lógica con respecto a la fecha actual para que los subprocesos solo usen correos electrónicos recientes. ¿Entonces podría haber algo más útil almacenado en el encabezado del correo electrónico?

  • Usuario (por dirección de correo electrónico única)
  • Línea de asunto única (regex re: ¿problemas de procesamiento?)
  • Fecha actual (los correos electrónicos deben ser relativos entre sí)
  • ¿Algunas otras pistas para buscar en el encabezado del correo electrónico?

Tengo una idea aproximada de cómo hacerlo, tengo curiosidad por ver algunas implementaciones actuales, parece que no puedo encontrar ninguna.

Cualquier puntero sería muy apreciado!


Los hilos de correo electrónico son una lista enlazada, la información en los encabezados contiene suficiente información para reconstruir la lista a partir de sus componentes.

Examine los encabezados de los correos electrónicos y busque algunos encabezados específicos.

Las claves que utilizará son Message-ID , In-Reply-To y References . Estos encabezados le brindan información sobre a qué mensaje se respondió y qué otras identificaciones son importantes para el hilo del correo electrónico.

La forma más fácil de encontrar información sobre los encabezados de un correo electrónico es abrir el ''Mensaje original'' en gmail (desde el menú más).