Schrift
[thread]8964[/thread]

CSV Datei aus Mail extrahieren: Mail base64 codiert



<< >> 5 Einträge, 1 Seite
krusty
 2007-05-04 15:16
#76439 #76439
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

kennt ihr eine Möglichkeit eine CSV Datei aus einer Mail zu extrahieren. Habe mir schonmal MIME angeschaut, aber leider nix gefunden. Die CSV wird als Attachment mitgeliefert.

Ach ja die ganze Mail ist auch noch base64 codiert.

Eine Routine um diese zu decodieren habe ich bereits.

Gruß
Krusty
GwenDragon
 2007-05-04 15:24
#76440 #76440
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
krusty
 2007-05-04 16:10
#76441 #76441
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hi,

danke für den Tipp.
Habe mir mal ein bissel was zusammengestrickt was sogar auf Anhieb geklappt hat. Hätte da aber noch eine Frage.

Findet das Tool automatisch heraus wie die Mail Codiert ist? Also ob base64 oder etwas anders?

Gruß
Krusty
sid burn
 2007-05-04 19:11
#76442 #76442
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=krusty,04.May.2007, 14:10]Findet das Tool automatisch heraus wie die Mail Codiert ist? Also ob base64 oder etwas anders?[/quote]
Im Header sollte stehen wie der Anhang Codiert ist. Also z.B. soetwas.

Code: (dl )
1
2
3
4
5
6
7
Content-Type: image/jpeg;
name="testbild.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="testbild.jpg"

4AAQSkZJRgABAgEASABIAAD/7RakUGhvdG9zaG9wIDMuMA
[+ weitere Zeilen des obigen Zahlensalates]
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
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ß
<< >> 5 Einträge, 1 Seite



View all threads created 2007-05-04 15:16.