Thread CSV Datei aus Mail extrahieren: Mail base64 codiert (4 answers)
Opened by krusty at 2007-05-04 15:16

krusty
 2007-05-07 13:06
#76443 #76443
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hallo,

also habe jetzt mal etwas gefunden und es an meine Bedürfnisse angepasst. Jedoch habe ich noch ein Problem. Ich erhalte immer mindestens 3 Dateien. Eine davon ist die gewünschte CSV Datei und die anderen beiden sind eine TXT und eine HTML Datei. Nun möchte ich nur die CSV Datei behalten bzw. aus der Mail Parsen.
Ich habe gesehen, das man mit purge die gespeicherten Dateien löschen kann, jedoch werden damit alle Dateien gelöscht. Will aber die CSV behalten. Habt ihr eine Idee wie man das purge einsetzen kann, damit nur die TXT und HTML Dateien gelöscht werden?

Anbei das Script:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/perl

use strict;
use MIME::Parser;

die "Usage makeCSV Filename\n" if $#ARGV != 0;

my $infile      = $ARGV[0];
my $top_entity;
my $pfad        = "/csv";
my $prefix      = "Message";
my $filename;

# Datei mit MIME-Nachricht einlesen und parsen
$top_entity = &parse_MIME_Stream($infile);

# MIME-Nachricht rekursiv durchlaufen
&walk($top_entity);

exit;

sub parse_MIME_Stream
{
        my $file = shift;
        my $parser = '';
        die "NO FILE $!" unless defined $file;
        $parser = MIME::Parser->new();
        $parser->output_to_core('NONE');
        $parser->output_dir($pfad);
        $parser->output_prefix($prefix);

        open(INPUT,$file) or die $!;
        my $top_entity = $parser->read(\*INPUT);
        close(INPUT) or die $!;

        return $top_entity;
}

sub walk #(Entity)
  {
  my $entity = shift if @_;
  return unless defined $entity;

  my $head = $entity->head();

  if ($head->mime_type() =~ m/multipart/i)
    { # mehrteilige Nachricht
    my $i;
    my $num_alt_parts  = $entity->parts();
    my $current_entity;
    # alle Teile der Nachricht rekursiv abarbeiten
    for ($i = 0; $i < $num_alt_parts; $i++)
      {
      $current_entity = $entity->parts($i);
      &walk($current_entity);
      }
    }
  else
    { # einteilige Nachricht
    &handle_head($head) if (defined $head);
    }
  }

sub handle_head #(Header)
  {
  my $current_head = shift;
  $current_head->decode;
  $current_head->unfold;

  if (  $current_head->recommended_filename() =~ m/\.csv/i )
  {
        print $current_head->recommended_filename()."\n";
  }
}


INFO: Ich lasse den Dateinamen der CSV Datei ausgeben, da ich diesen für ein anderes Script benötige.
INFO: Habe
Code (perl): (dl )
use warnings;
nicht benutzt da ich laufend eine Warnmeldung bekomme, jedoch kann ich diese nicht abstellen / beheben.

Gruß

View full thread CSV Datei aus Mail extrahieren: Mail base64 codiert