deus18 Geschrieben 5. Juli 2002 Geschrieben 5. Juli 2002 Ich hab ein kleines Projekt vor und würde da ganz kurz um eure hilfe bitten! Folgende Situation: Jemand schickt eine email an die Adresse abc@abc.de ich will sie per script vom mailserver abholen und als textdatei speichern. Gibts dazu irgendwelche fertigen scripte oder kann ich da irgendwie per telnet über pop3 die abholen und dann in meinem script weiterverarbeiten? habt ihr ideen dazu ? wäre echt super! danke! Zitieren
dr.disk Geschrieben 8. Juli 2002 Geschrieben 8. Juli 2002 Unter Perl gibt's für sowas das Modul Net::POP3. Ansonsten kann ich Dir auch das Programm fetchmail empfehlen - genau für solche Aufgaben wurde dieses entwickelt. Für welche Skriptsprache/für welches OS soll's denn sein? Zitieren
deus18 Geschrieben 8. Juli 2002 Autor Geschrieben 8. Juli 2002 os ist mir eigentlich egal, kann linux oder win sein. und die scriptsprache ist auch egal, da dieses script nur die datei bereitstellen soll. der rest wird duch ein anderes script abgewickelt! Zitieren
deus18 Geschrieben 8. Juli 2002 Autor Geschrieben 8. Juli 2002 hast du denn dazu ein beispielscript für perl das alle emails abholt und als txt speichert, da ich absoluter perl neuling bin. wäre echt klasse von dir ! Zitieren
dr.disk Geschrieben 8. Juli 2002 Geschrieben 8. Juli 2002 Aber klar doch, eben mal kurz zusammengehäckert... #!/usr/bin/perl -w use strict; use Net::POP3; my $data = { server => 'localhost', # POP3-Server user => 'steffen', # Accountname pass => 'sag_ich_nicht' # Paßwort }; # Server kontaktieren, login my $pop = Net::POP3->new($data->{server}, Timeout => 120); my $msgno = $pop->login($data->{user}, $data->{pass}); map { # Mails holen, speichern und löschen print "Speichere Email $_...\n"; open FH, "> mail_$_.txt" or die "Error: $!\n"; print FH join '', @{$pop->get($_)}; close FH; $pop->delete($_); } 1..$msgno unless $msgno == 0; $pop->quit(); Die Benutzerdaten mußt Du natürlich noch anpassen. Damit's auch richtig funktioniert solltest Du, nachdem Du die Mails verarbeitet hast, die Datein löschen. Zitieren
deus18 Geschrieben 8. Juli 2002 Autor Geschrieben 8. Juli 2002 kann ich denn nur den body auslesen, also diesen ganzen blabla weglassen und nur den eigendlichen nachrichtentext bekommen? Zitieren
dr.disk Geschrieben 9. Juli 2002 Geschrieben 9. Juli 2002 Dazu müßte man das Skript anpassen. Der Head ist vom Body durch eine (die erste vorkommende) Leerzeile getrennt. Muß jetzt jedoch zum Kunden - falls Du keine Lösung findest melde Dich morgen noch mal. Zitieren
deus18 Geschrieben 9. Juli 2002 Autor Geschrieben 9. Juli 2002 ich bin nervig, aber sorry. also wenn du mir nocheinmal helfen könntest das wäre echt der hit. die genaue anforderung wäre das es alles emails abholt und den inhalt (sprich nur den body) jeder nachricht in hintereinader in nur EINE datei zu schreiben. ich hab mich jetzt schon ein bischen eingelesen in das ganze aber wie du das programmiert hast bin ich noch nicht ganz dahinter gekommen! Zitieren
Jaraz Geschrieben 9. Juli 2002 Geschrieben 9. Juli 2002 Hallo, Perl ist nun mal write-only. Ich kann es leider nicht testen, meine aber das wenn du print FH join '', @{$pop->get($_)}; durch: print FH join '', @{$pop->Body($_)}; ersetzt, er nur den Body der Mail speichert. Ich hoffe es funktioniert... Gruß Jaraz Zitieren
deus18 Geschrieben 10. Juli 2002 Autor Geschrieben 10. Juli 2002 also das mit dem body functioniert nicht da ich das paket mail:pop3client nicht installieren kann. hat da jemand ne ahnung oder ne andere lösung ? Zitieren
Jaraz Geschrieben 10. Juli 2002 Geschrieben 10. Juli 2002 Wieso nicht? Windows oder Unix? Falls Windows, Activestate? Gruß Jaraz Zitieren
deus18 Geschrieben 10. Juli 2002 Autor Geschrieben 10. Juli 2002 windows mit activestate und beim installieren von ppm install Mail-POP3Client.ppd bekomme ich dann folgendes: Installing package 'Mail-POP3Client.ppd'... Error installing package 'Mail-POP3Client.ppd': Read a PPD for 'Mail-POP3Client. ppd', but it is not intended for this build of Perl (MSWin32-x86-multi-thread) Zitieren
Jaraz Geschrieben 10. Juli 2002 Geschrieben 10. Juli 2002 Hallo, die Rede war doch von NET::POP3 und nicht Mail::POP3. Das Modul NET::POP3 ist bei meiner Perl Umgebung von Activestate schon drin und funktioniert auch. Das mit: print FH join '', @{$pop->Body($_)}; funktioniert aber leider nicht. Gruß Jaraz Zitieren
deus18 Geschrieben 10. Juli 2002 Autor Geschrieben 10. Juli 2002 stimmt, denn das body funktioniert nur im mail::pop3 modul. hast du denn eine idee wie das klappen könnte ? Zitieren
dr.disk Geschrieben 10. Juli 2002 Geschrieben 10. Juli 2002 Um nur eine Datei zu erhahlten muß der open Befehl vor map eingefügt werden und der Dateiname angepaßt - also $_ löschen. Zu guter letzt noch close in die letzte Zeile und Du erhälst nur eine Datei. Mit Deinem Windows-Problem kann ich Dir leider nicht weiterhelfen. Zitieren
dr.disk Geschrieben 10. Juli 2002 Geschrieben 10. Juli 2002 Mir ist grerade noch was eingefallen... Funktioniert eigentlich das Modul Net::POP3? Man könnte auch die Einlese-Routine soweit ändern, daß Sie nur den Body speichert. Das Gleiche wie gestern, muß weg zum Kunden - vielleicht heute Abend, ansonsten hoffentlich morgen wieder... Zitieren
deus18 Geschrieben 10. Juli 2002 Autor Geschrieben 10. Juli 2002 das mit der einleseroutine wäre super, mit net::pop3 hat alles geklappt! wäre super wenn du mir da nochmal weiterhelfen könntest!" Zitieren
dr.disk Geschrieben 10. Juli 2002 Geschrieben 10. Juli 2002 Ok, wie wär's denn damit? #!/usr/bin/perl -w use strict; use Net::POP3; my $data = { server => 'localhost', # POP3-Server user => 'steffen', # Accountname pass => 'sag_ich_nicht' # Paßwort }; # Server kontaktieren, login my $pop = Net::POP3->new($data->{server}, Timeout => 120); my $msgno = $pop->login($data->{user}, $data->{pass}); open FH, "> mail.txt" or die "Error: $!\n"; map { print "Speichere Email $_...\n"; my $body = 0; foreach (@{$pop->get($_)}) { chomp; if($body) { print FH "$_\n"; } else { /^\s*$/o and $body = 1; } } $pop->delete($_); } 1..$msgno unless $msgno == 0; close FH; $pop->quit(); Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.