Schrift
[thread]8234[/thread]

Mail mit Anhang abholen und auswerten

Leser: 3


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
krusty
 2006-08-11 14:11
#68821 #68821
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

habe folgendes Problem. Habe ein Script welches mittels Modul Mail::POP3Client eine Mail mit Attachment von meinem Postfach abholt. Nun will ich ausschließlich das Attachment verwenden. Codiert ist das ganze nicht. Also keine Base64 usw.
Bei dem Attachment handelt es sich um eine csv Datei.

Gibt es ein Modul mit dem ich das herausbekomme oder habt ihr sonst eine Idee?

Vielen Dank für Support.
renee
 2006-08-11 14:22
#68822 #68822
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Schau Dir mal CPAN:MIME::Parser aus CPAN:MIME-tools an.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
krusty
 2006-08-11 15:32
#68823 #68823
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Danke für die Links. Habe ich mir mal angeschaut, aber nicht wirklich was brauchbares gefunden. Hast du noch eine andere Idee/Tipp?
krusty
 2006-08-11 17:29
#68824 #68824
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Ich habe jetzt den ganzen Nachmittag daran gesessen etwas zu meinem Problem zu finden. Bin ich einfach nur zu blöde vernünftige Suchbegriffe zu wählen oder findet man zu dem Thema Mailanhänge per Perlscript in eine Datei zu speichern wirklich nicht. Haber verschiedenste Foren abgesucht und auch das www kann mir diesesmal nicht helfen.

Könnt ihr mir nicht vielleicht helfen etwas zu finden was mich weiterbringen kann?
renee
 2006-08-11 17:39
#68825 #68825
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe das noch nicht gemacht, aber vielleicht helfen Dir die folgenden Links weiter:
* CPAN:Email::MIME::Attachment::Stripper
* CPAN:Email::MIME
* http://www.issociate.de/board....rn.html
* http://www.thomas-fahle.de/pub/perl/MIME/MIME_Parse.html
* http://www.perl.com/lpt/a/846
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
krusty
 2006-08-11 18:11
#68826 #68826
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Nehmen wir doch mal das Script von einem deiner Links

Code: (dl )
1
2
3
4
5
6
7
8
9
10
use MIME::Explode;

my $explode = MIME::Explode->new(
output_dir => "tmp",
mkdir => 0755,
decode_subject => 1,
check_content_type => 1,
content_types => ["image/gif", "image/jpeg", "image/bmp"],
types_action => "exclude"
);


Verstehe nicht wie ich das anpassen muss, damit es aus meiner Mail mit csv im Anhang nur die csv Datei speichert.

Kannst du mir das vielleicht erklären?

Und was muss ich bei content_types schreiben. Die readme&´s sind sehr schlecht, da findest du gar nix brauchbares. Ein vernünftiges Beispiel wäre hier sehr hilfreich.
krusty
 2006-08-11 18:39
#68827 #68827
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Vielleicht habe ich auch noch eine andere Möglichkeit.

In der Mail die ich von meinem Postfach abgeholt habe steht die csv folgdendermaßen drin.

Den Header habe ich mal weg gelassen.

test1;test2;test3;test4;test=
5;test6
1;2;3;4;5=
;6

usw.

also die Zeile sind einfach wild unterbrochen mit einem "=" und einem Return. Gibt es die Möglichkeit per Script die Zeilen wieder zusammenzufügen?

Habe folgendes Script geschrieben:
Code: (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
#!/usr/bin/perl -w

use strict;
use warnings;

my $path = "/Ordner/wo/alles/liegt";
my $file = "datei_mit_der_mail";

my $gefunden = 0;

open(DATA, "<$path/$file") || die "Cannot open $file file!\n";
while (<DATA>)
{
chomp;
$zeile = $_;
if ( /^test1;test2;test3/ )
{
$gefunden = 1;
}
if ( $gefunden == 1 )
{
if ( $zeile =~ s/\=// )
{
print "Debug: $zeile\n";
}
}
}
close (DATA);


Damit bekomme ich die "=" aus den Zeilen. Nur wie bekomme ich die Zeilenumbrüche hinter den "=" weg???

Habt ihr eine Idee???

Versucht habe ich es schon mit diesem Suchmuster:
Code: (dl )
if ( $zeile =~ s/\=\r// )

oder auch
Code: (dl )
if ( $zeile =~ s/\=\n// )

Dann bekomme ich aber nichts mehr zurück. :(
styx-cc
 2006-08-11 23:59
#68828 #68828
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Ich hab das so geloest:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use strict;
use warnings;

for (<DATA>) {
$_ =~ s/=\n//;
print;
}

__DATA__
test1;test2;test3;test4;test=
5;test6
1;2;3;4;5=
;6


Ausgabe:
Code: (dl )
1
2
3
G:\programmierung\perl\community>perl cvs-mail.txt
test1;test2;test3;test4;test5;test6
1;2;3;4;5;6


MfG, Stefan
Pörl.
krusty
 2006-08-12 10:08
#68829 #68829
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
@styx-cc,

vielen Dank für dein Script. Funktioniert super.

Kannst du mir vielleicht auch noch den Unterschied zwischen meinem Konstrukt und deinem sagen?

Meins sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my $gefunden = 0;

open(DATA, "<$path/$file") || die "Cannot open file!\n";
while (<DATA>)
{
$zeile = $_;
if ( /^Belegnummer;Position;Materialnr.;/ )
{
$gefunden = 1;
}
if ( $gefunden == 1 )
{
$zeile =~ s/=\n//;
print "Debug: $zeile\n";
}
}
close (DATA);


Wenn ich dein Script einbaue funktioniert es:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
open(DATA, "<$path/$file") || die "Cannot open file!\n";
for (<DATA>)
{
$zeile = $_;
if ( /^Belegnummer;Position;Materialnr.;/ )
{
$gefunden = 1;
}
if ( $gefunden == 1 )
{
$zeile =~ s/=\n//;
print $zeile;
}
}
close (DATA);


Verstehe ehrlichgesagt nicht ganz warum das nur mit einer for Schleife funktioniert. Wäre super wenn du das kurz erklären könntest.

Danke nochmal für die Hilfe.
Dubu
 2006-08-12 14:44
#68830 #68830
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Du solltest dir aber darüber im Klaren sein, dass bei Wikipedia:Quoted-Printable-Kodierung nicht nur zusätzliche Zeilenumbrüche mit einem Gleichheitszeichen davor auftauchen, sondern auch alle Nicht-ASCII-Zeichen als Hexcodes gequoted werden. So lange keine Umlaute etc. in deinem Anhang auftauchen, geht es vielleicht gut ...

Für eine robustere Auswertung empfehle auch ich eines der MIME::-Module. Dazu müsste man aber wissen, wie der MIME-Header des Anhangs aussieht.

Bzgl. "while" vs. "for": Ein "while" ist immer besser zum Einlesen einer Datei, da ein "for" erste die gesamte Datei einliest, bevor die Schleife ausgeführt wird. Die beiden Codes sollten aber sonst äquivalent sein. Der entscheidende Unterschied zu deinem Code weiter oben ist natürlich, dass du das chomp() weggelassen hast: Wenn du erst alle Newlines entfernst und dann aber hinter jeder Zeile beim print() wieder ein Newline ausgibst, kannst du ja nicht die Zeilen zusammenfügen.
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2006-08-11 14:11.