• Publicidad

Separar mails

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Separar mails

Notapor creating021 » 2007-12-01 20:00 @875

Hola.

Bueno, si en UNIX/Unix-Like ven /var/mail/usuario o /var/spool/mail/usuario podrán ver que todos los e-mails están en un archivo ( separado por "\n" ).

La pregunta es: ¿ Cómo separa los mails ?
Yo tenía planeado usar Tie::File que da mejores opciones que DB_File, y sacar los headers definidos por el RFC-4021 así que en teoría solo tendría que saber que un mail va así:
Código: Seleccionar todo
Header
"\n"
Body
"\n"


Todo va bien usando una que otra regex de novato :roll: , pero si encuentro un mail mal formado ( un RE: de algún usenet que contiene partes de headers en el body ).

Si tienen algún tip... ¡No se lo guarden!

Gracias.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Publicidad

Notapor explorer » 2007-12-01 21:43 @946

El formato de esos buzones se llama mbox.

Para extraer correos que cumplan una condición, lo mejor es usar grepmail (con su apabullante número de opciones) disponible en tu Linux más cercano.

O usar Perl. Y no hace falta regex complicadas. Sólo hay que instalar alguno de los varios módulos existentes para manejar carpetas mbox, como por ejemplo Mail::Box.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 use Mail::Box::Manager;
 my $mgr    = Mail::Box::Manager->new;
 my $folder = $mgr->open(folder => $ENV{MAIL}, ...);
 print $folder->name;

 # Get the first message.
 print $folder->message(0);

 # Delete the third message
 $folder->message(3)->delete;

 # Get the number of messages in scalar context.
 my $emails = $folder->messages;

 # Iterate over the messages.
 foreach ($folder->messages) {...} # all messages
 foreach (@$folder) {...}          # all messages

 $folder->addMessage(Mail::Box::Message->new(...));
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2007-12-05 15:26 @684

El módulo está muy bien, muchas gracias :)
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados