[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux] striper les attachments de mails



J'utilisais ceci pour les anciennes versions de RT (-> alias-mail ->
script -> rt).

Cela permet d'enlever les brols MIME et de les conserver et de les
remplacer par une url pour une lecture via browser.

Donc, c'est surement une piste de départ sans peut-être la lecture via le
browser.

hope this helps

alx


#!/usr/bin/perl
use MIME::Parser;
$now = time();
$basepath = "http://service.toad.net/stripmime/$now-$$";;
$basefilepath = "/home/httpd/html/stripmime/$now-$$";
$outputprog = "/usr/local/rt/bin/rt-mailgate @ARGV";

sub dump_entity {
    my ($entity, $name) = @_;
    defined($name) or $name = "message";
    my $IO;

    # Output the head, if it's the root level head
    # Otherwise, it's just some crappy mime header
    if ($name eq "message") {
       print OUT $entity->head->original_text."\n";
    }

    # Output the body:
    my @parts = $entity->parts;
    if (@parts) {                     # multipart...
	my $i;
	foreach $i (0 .. $#parts) {       # dump each part...
	    dump_entity($parts[$i], ("$name, part ".(1+$i)));
	}
    }
    else {                            # single part...

	# Get MIME type, and display accordingly...
	my ($type, $subtype) = split('/', $entity->head->mime_type);
	my $body = $entity->bodyhandle;


        # If it's text, display it, perhaps
        my $path = $body->path;
        my ($filename) = ($path =~ /\/([^\/]+)$/);

	if ($type =~ /^(text|message)$/ && $subtype ne "html") {
           print OUT "\n>>> Text component $filename:\n" if ($filename !~
"msgauto");
           if ($IO = $body->open("r")) {
	      print OUT $_ while (defined($_ = $IO->getline));
              $IO->close;
              push (@deletetemp, "$basefilepath/$filename");
           }
        } else {
            if ($subtype eq "html" && $filename =~ /msgauto/) {
               $newfilename = "$filename.html";
               $renametemp{"$basefilepath/$filename"} =
"$basefilepath/$newfilename";
               $filename = $newfilename;
            }
	    print OUT "\n>>> $type/$subtype component,
$name:\n$basepath/$filename\n";
	}
    }
    1;
}

#------------------------------
#
# main
#
sub main {

    # Create a new MIME parser:
    my $parser = new MIME::Parser;

    # Set the output directory:
    (-d "$basefilepath") or mkdir "$basefilepath",0755 or die "mkdir: $!";
    (-w "$basefilepath") or die "can't write to directory";
    $parser->output_dir($basefilepath);
    open (OUT, "|$outputprog");

    $parser->output_prefix("msgauto");


    # Read the MIME message:
    $entity = $parser->read(\*STDIN) or die "couldn't parse MIME stream";

    # Dump it out:
    dump_entity($entity);
    close(OUT);


    # Delete unneeded temporary files
    foreach (@deletetemp) {
       unlink ($_);
    }

    # Rename our temporary files that were renamed (html, etc.)
    foreach (keys %renametemp) {
       rename ($_, $renametemp{$_});
    }

    # Delete our directory, or at least try -- won't delete if it's not
empty
    rmdir($basefilepath);
}

&main();

exit(0);

#------------------------------
1;


-- 
---
Alexandre Dulaunoy
  Work    : http://www.conostix.com/       adulau@conostix.com
  Private : http://www.thinkingsecure.com/ adulau@thinkingsecure.com

"Liberty is the great parent of science and of virtue; and a nation will
be great in both in proportion as it is free. " T. Jefferson



On Mon, 1 Oct 2001, P. Vranckx wrote:

> Bonjour,
>
> J'utilise sendamil et amavis pour checker les mails. Lorsqu'un virus est trouve, le recipient recoit un message d'avertissement mais pas le contenu du message.
> Existe-t-il un outil qui permet de stripper les attachments pour ne laisser que le texte du message ?
> (peut-etre un peu complique parce que le texte lui-meme est un attachment multipart....)
>
> Patrick
>
> [ Soyez précis dans vos sujets svp afin de déterminer directement  ]
> [ le type de demande...                                            ]
> [ Pour vous (dés)inscrire, aller sur http://unixtech.be/ml.php     ]
> [ Archives de la mailing list: http://archives.unixtech.be/linux/  ]
> [ http://unixtech.be              Contact: listmaster@unixtech.be  ]
>


[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://unixtech.be/ml.php     ]
[ Archives de la mailing list: http://archives.unixtech.be/linux/  ]
[ http://unixtech.be              Contact: listmaster@unixtech.be  ]