Hallo erstmal, Ich habe unten stehendes Script gefunden das in Perl geschrieben ist. aber wenn ich das Starte dann kommt eine Fehlermeldung. Und da ich Perl nicht ganz so perfekt kann ;-) weiß ich nicht was ich machen soll! Wie geht denn das Script unten? Ich bekomme immer, Datei nicht gefunden! zurück! Ist von der qmail.org gezocken. #!/usr/local/bin/perl # # mbox2maildir: coverts mbox file to maildir directory - the reverse of # maildir2mbox from the qmail distribution. # # Usage: mbox2maildir uses the same environment variables as maildir2mbox: # MAILDIR is the name of your maildir directory; MAIL is the name of your # mbox file; MAILTMP is ignored. MAIL is deleted after the conversion. # # WARNING: there is no locking; don't run more than one of these! you # have been warned. # # based on convert-and-create by Russell Nelson <nelson@qmail.org> # kludged into this by Ivan Kohler <ivan@voicenet.com> 97-sep-17 require 'stat.pl'; local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; local $SIG{QUIT} = 'IGNORE'; local $SIG{TERM} = 'IGNORE'; local $SIG{TSTP} = 'IGNORE'; ($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell) = getpwuid($<); die "fatal: home dir $dir doesn't exist\n" unless -e $dir; &Stat($dir); die "fatal: $name is $uid, but $dir is owned by $st_uid\n" if $uid != $st_uid; chdir($dir) or die "fatal: unable to chdir to $dir\n"; $spoolname = "$ENV{MAILDIR}"; -d $spoolname or mkdir $spoolname,0700 or die("fatal: $spoolname doesn't exist and can't be created.\n"); chdir($spoolname) or die("fatal: unable to chdir to $spoolname.\n"); -d "tmp" or mkdir("tmp",0700) or die("fatal: unable to make tmp/ subdir\n"); -d "new" or mkdir("new",0700) or die("fatal: unable to make new/ subdir\n"); -d "cur" or mkdir("cur",0700) or die("fatal: unable to make cur/ subdir\n"); open(SPOOL, "<$ENV{MAIL}") or die "Unable to open $ENV{$MAIL}\n"; $i = time; while(<SPOOL>) { if (/^From /) { $fn = sprintf("new/%d.$$.mbox", $i); open(OUT, ">$fn") or die("fatal: unable to create new message"); $i++; next; } s/^>From /From /; print OUT or die("fatal: unable to write to new message"); } close(SPOOL); close(OUT); unlink("$ENV{MAIL}"); -- Mit freundlichen Grüssen Sascha Peters linux@progressing.de
On 02-Jul-2001, Sascha Peters wrote:
Hallo erstmal,
Ich habe unten stehendes Script gefunden das in Perl geschrieben ist. aber wenn ich das Starte dann kommt eine Fehlermeldung. Und da ich Perl nicht ganz so perfekt kann ;-) weiß ich nicht was ich machen soll! Wie geht denn das Script unten?
Ich bekomme immer, Datei nicht gefunden! zurück!
Hast Du vielleicht vergessen dem Skript Ausfuehrrechte zu geben? chmod +x <Skript> Nur so ein Gedanke... Gruss, Oliver
On 02-Jul-2001, Sascha Peters wrote:
Hallo erstmal,
Am Montag, 2. Juli 2001 um 18:53 schrieb Oliver Kiehl:
Hast Du vielleicht vergessen dem Skript Ausfuehrrechte zu geben? chmod +x <Skript>
Nur so ein Gedanke...
Nein, die Rechte hat das Script!!!
Sorry, bitte nicht toeten ;-) Wo liegt bei Dir Perl? vermutlich unter /usr/bin/perl Wenn das so ist dann aendere die erste Zeile in #!/usr/bin/perl Gruss, Oliver
On Mon, 02 Jul 2001 at 18:43 (+0200), Sascha Peters wrote:
Ich habe unten stehendes Script gefunden das in Perl geschrieben ist. aber wenn ich das Starte dann kommt eine Fehlermeldung. Und da ich Perl nicht ganz so perfekt kann ;-) weiß ich nicht was ich machen soll! Wie geht denn das Script unten?
Ich bekomme immer, Datei nicht gefunden! zurück!
Ist von der qmail.org gezocken.
#!/usr/local/bin/perl
Steht Perl in diesem Pfad?
# # mbox2maildir: coverts mbox file to maildir directory - the reverse of # maildir2mbox from the qmail distribution. # # Usage: mbox2maildir uses the same environment variables as maildir2mbox: # MAILDIR is the name of your maildir directory; MAIL is the name of your # mbox file; MAILTMP is ignored. MAIL is deleted after the conversion. # # WARNING: there is no locking; don't run more than one of these! you # have been warned. # # based on convert-and-create by Russell Nelson <nelson@qmail.org> # kludged into this by Ivan Kohler <ivan@voicenet.com> 97-sep-17
require 'stat.pl';
Diese Datei (stat.pl) muss Perl finden, gibts die? [...] Den Rest fängt, soweit ich das in der Kürze gesehen habe, das Perl-Skript selber ab. Jan BTW: Der _genaue_ Wortlaut der Fehlermeldung wäre interessant, da kommt doch sicher mehr als *Datei nicht gefunden*?
Hallo erstmal, Am Montag, 2. Juli 2001 um 21:14 schrieb Jan Trippler:
On Mon, 02 Jul 2001 at 20:29 (+0200), Oliver Kiehl wrote:
On 02-Jul-2001, Jan Trippler wrote:
Diese Datei (stat.pl) muss Perl finden, gibts die?
stat.pl ist ein Standard-Modul. Die hat er garantiert.
Ja, aber perl muss es auch finden.
Also der Tip war schonmal nicht schlecht, aber nun sagt er wenn ich "% perl mbox2maildir MAILBOX" schreib, "Unable to open" Wenn ich ohne Parameter aufrufe dann macht er nix! bzw legt er ein leeres Maildir an! Wie und mit welchen Parametern kann das Script den umgehen? Ich kan Perl nicht so gut um das daraus entnehmen zu können! wäre nett wenn jemand das Script erläutern könnte, danke! -- Mit freundlichen Grüssen Sascha Peters linux@progressing.de
On Die, 03 Jul 2001 at 07:25 (+0200), Sascha Peters wrote:
Also der Tip war schonmal nicht schlecht, aber nun sagt er wenn ich "% perl mbox2maildir MAILBOX" schreib, "Unable to open"
Wenn ich ohne Parameter aufrufe dann macht er nix! bzw legt er ein leeres Maildir an!
Sieht so aus, als ob das ein wenig Umgebung fehlt. Setze mal MAIL auf Deine Standard-Mailbox: export MAIL=/pfad/zu/deiner/mbox
Wie und mit welchen Parametern kann das Script den umgehen? Ich kan Perl nicht so gut um das daraus entnehmen zu können!
wäre nett wenn jemand das Script erläutern könnte,
Sorry, ich habs schon gelöscht. Jan
Hallo erstmal, Am Dienstag, 3. Juli 2001 um 10:43 schrieb Jan Trippler:
On Die, 03 Jul 2001 at 07:25 (+0200), Sascha Peters wrote:
Also der Tip war schonmal nicht schlecht, aber nun sagt er wenn ich "% perl mbox2maildir MAILBOX" schreib, "Unable to open" Wenn ich ohne Parameter aufrufe dann macht er nix! bzw legt er ein leeres Maildir an!
Sieht so aus, als ob das ein wenig Umgebung fehlt. Setze mal MAIL auf Deine Standard-Mailbox: export MAIL=/pfad/zu/deiner/mbox
Das kann schon sein, ich habe nun die beiden Variabeln im Script manuell gesetzt und werde nun irgendwie diese per Parameter setzen lassen. mit einer if abfrage wohl, scheint mir am günstigsten, dann nimmt der die Umgebung wenn keine Parameter mit übergeben werden!
wäre nett wenn jemand das Script erläutern könnte,
Wenn das jemand hinbekommt ich bin da immernoch dankbar drüber! -- Mit freundlichen Grüssen Sascha Peters linux@progressing.de
On 03-Jul-2001, Sascha Peters wrote:
wäre nett wenn jemand das Script erläutern könnte, danke!
ich probier mal mein bestes:
#!/usr/bin/perl # # mbox2maildir: coverts mbox file to maildir directory - the reverse of # maildir2mbox from the qmail distribution. # # Usage: mbox2maildir uses the same environment variables as maildir2mbox: # MAILDIR is the name of your maildir directory; MAIL is the name of your # mbox file; MAILTMP is ignored. MAIL is deleted after the conversion. # # WARNING: there is no locking; don't run more than one of these! you # have been warned. # # based on convert-and-create by Russell Nelson <nelson@qmail.org> # kludged into this by Ivan Kohler <ivan@voicenet.com> 97-sep-17
require 'stat.pl';
ist sowas wie ein include unter C
local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; local $SIG{QUIT} = 'IGNORE'; local $SIG{TERM} = 'IGNORE'; local $SIG{TSTP} = 'IGNORE';
Signale die vom System geschickt werden, werden ignoriert (mehr ueber Signale unter "man 7 signal")
($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell) = getpwuid($<);
holt vom System Informationen ueber Dich. Die Variablennamen erlauetern was zurueckgegeben wird.
die "fatal: home dir $dir doesn't exist\n" unless -e $dir;
wenn Dein Home-Verzeichnis nicht gefunden wurde, dann verlasse das Programm.
&Stat($dir); die "fatal: $name is $uid, but $dir is owned by $st_uid\n" if $uid != $st_uid;
&Stat($dir) setzt $st_uid auf den UID des Besitzers. Wenn diese ungleich deiner UID ist, dann verlasse das Programm
chdir($dir) or die "fatal: unable to chdir to $dir\n";
bedarf keiner weiteren Erlaeuterung
$spoolname = "$ENV{MAILDIR}";
setzt $spoolname auf die Systemvariable $MAILDIR diese findest Du heraus wenn Du in Deiner Shell 'echo $MAILDIR' eintippst.
-d $spoolname or mkdir $spoolname,0700 or die("fatal: $spoolname doesn't exist and can't be created.\n");
wenn das Verzeichnis nicht existiert, dann lege es an. '0700' bezieht sich auf die Rechte. or die ... (das solltest Du mittlerweile verstehen)
chdir($spoolname) or die("fatal: unable to chdir to $spoolname.\n");
bedarf keiner weiteren Erlaeuterung
-d "tmp" or mkdir("tmp",0700) or die("fatal: unable to make tmp/ subdir\n"); -d "new" or mkdir("new",0700) or die("fatal: unable to make new/ subdir\n"); -d "cur" or mkdir("cur",0700) or die("fatal: unable to make cur/ subdir\n");
siehe oben
open(SPOOL, "<$ENV{MAIL}") or die "Unable to open $ENV{$MAIL}\n";
oeffne $MAIL (Systemvariable). (findest Du wieder mit 'echo $MAIL' heraus. Das "<" steht fuer "lesen". der Datei wird das Filehandle "SPOOL" gegeben.
$i = time;
time: Sekunden seit dem 1.1.1970
while(<SPOOL>) {
lese jede Zeile aus $MAIL
if (/^From /) {
Wenn die Zeile mit 'From' anfaengt dann:
$fn = sprintf("new/%d.$$.mbox", $i); open(OUT, ">$fn") or die("fatal: unable to create new message");
oeffne ('>' bedeutet zum ueberschreiben) die Datei new"Zeit".$$.mbox ("Zeit" mit der jetzigen Zeit ersetzen (s.o). wenn die Datei nicht existiert wird sie automatisch angelegt.
$i++;
inkrementiere $i;
next;
ueberspringe den restlichen Teil der Schleife, und gehe zum naechsten 'while(<SPOOL>)'
} s/^>From /From /;
ersetze ">From " mit "From "
print OUT or die("fatal: unable to write to new message");
schreibe die Zeile nach OUT (s.o)
} close(SPOOL); close(OUT); unlink("$ENV{MAIL}");
alle Filehandles schliessen Gruss, Oliver
Hallo erstmal, Am Dienstag, 3. Juli 2001 um 18:47 schrieb Oliver Kiehl:
On 03-Jul-2001, Sascha Peters wrote:
wäre nett wenn jemand das Script erläutern könnte, danke!
ich probier mal mein bestes:
danke ist sehr erfolgreich geglückt! Habe alles soweit verstanden, nur habe ich nun noch vielleicht ein paar Fragen zum eingentlichen Standard der jeweiligen Mailboxformate. Gibt es denn RFC´s oder Internetseiten wo der genaue Standards der Formate erklärt werden? Ich frage mich zum Beispiel ob es egal ist wie die Unterverzeichnisse des Maildirs heißen oder die Namen der einzelnen eMail? Wenn die egal sind dann wäre da nämlich super. Kann man auch mehrere Unterverzeichnisse mit ins Maildir einbauen? Wäre schön wenn einfach mal solche Internetseiten hier gepostet werden könnten. danke.
$fn = sprintf("new/%d.$$.mbox", $i); open(OUT, ">$fn") or die("fatal: unable to create new message");
hier zum beispiel wird die Mail *.mbox benannt, aber wenn ich mir direkt eine von procmail ins Maildir einsortieren lasse dann steht da suse. Das wirft doch die Frage auf ob die Namensgebung egal ist, und ob man die vielleicht sogar mit procmail oder qmail schon ändern kann? -- Mit freundlichen Grüssen Sascha Peters linux@progressing.de
On 03-Jul-2001, Sascha Peters wrote:
danke ist sehr erfolgreich geglückt! Habe alles soweit verstanden, nur habe ich nun noch vielleicht ein paar Fragen zum eingentlichen Standard der jeweiligen Mailboxformate. Gibt es denn RFC´s oder Internetseiten wo der genaue Standards der Formate erklärt werden? Ich frage mich zum Beispiel ob es egal ist wie die Unterverzeichnisse des Maildirs heißen oder die Namen der einzelnen eMail? Wenn die egal sind dann wäre da nämlich super. Kann man auch mehrere Unterverzeichnisse mit ins Maildir einbauen?
Wäre schön wenn einfach mal solche Internetseiten hier gepostet werden könnten.
http://www.imc.org/mail-standards.html ist Dein Freund Gruss, Oliver
On Die, 03 Jul 2001 at 18:47 (+0200), Oliver Kiehl wrote: [...]
&Stat($dir); die "fatal: $name is $uid, but $dir is owned by $st_uid\n" if $uid != $st_uid;
&Stat($dir) setzt $st_uid auf den UID des Besitzers.
Stat($dir) liest die Statusinformationen von $dir - u. a. den Eigentümer. Welche Variablen noch dazu gehören, kriegt man mit perldoc -m stat.pl raus. [...]
close(SPOOL); close(OUT); unlink("$ENV{MAIL}");
alle Filehandles schliessen
... und die durch $MAIL bezeichnete Datei löschen! Jan
Hallo erstmal, Am Dienstag, 3. Juli 2001 um 20:09 schrieb Jan Trippler:
[...]
close(SPOOL); close(OUT); unlink("$ENV{MAIL}");
alle Filehandles schliessen
... und die durch $MAIL bezeichnete Datei löschen!
Wieso denn das? wo steht den das? Ich weiß nicht das es da nicht steht aber wenn ich da Skript laufen lasse dann macht er das nicht, die mbox Datei ist nachher immer noch da! -- Mit freundlichen Grüßen Sascha Peters linux@progressing.de
On Mit, 04 Jul 2001 at 16:06 (+0200), Sascha Peters wrote:
Am Dienstag, 3. Juli 2001 um 20:09 schrieb Jan Trippler:
[...]
close(SPOOL); close(OUT); unlink("$ENV{MAIL}"); ^^^^^^^^^^^^^^^^^^^^^
alle Filehandles schliessen
... und die durch $MAIL bezeichnete Datei löschen!
Wieso denn das? wo steht den das? Ich weiß nicht das es da nicht steht aber wenn ich da Skript laufen lasse dann macht er das nicht, die mbox Datei ist nachher immer noch da!
perldoc -f unlink Was fehlt, ist eine Auswertung, ob die Datei tatsächlich gelöscht wurde (kann ja aufgrund der Berechtigungen sein, dass er das nicht darf) - unlink gibt die Anzahl der gelöschten Dateien zurück. Ändere doch spaßeshalber die Zeile mal in: print unlink ("$ENV{MAIL}"), "\n"; Dann siehst Du das Ergebnis. Jan
participants (3)
-
Jan.Trippler@t-online.de
-
Oliver Kiehl
-
Sascha Peters