Hi,
wie durchsuche ich den emailbody einer mail nach Begriffen, die in einer seperaten Datei stehen, um die Mail dann ggf. zu löschen.
Hier mein Versuch: (der entscheidende Teil steht zwischen den #####)
Der Rest des Scriptes ist ein Beispielscript zm Modul Net::Pop3.
Danke für Hilfe
Norbert
P.S: Wichtig wäre auch noch, daß das Script nicht alle weiteren Begriffe durchforstet, wenn bereits dererste ein Treffer wäre.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#! /usr/bin/perl
#use strict;
use CGI::Carp qw(fatalsToBrowser);
use Net::POP3;
print "Content-type: text/html\n\n";
print qq~<HTML><BODY><P>~;
my $host = "pop";
my $user = "";
my $pw = "";
my $pop3;
$pop3 = Net::POP3->new($host) || die("Kein Kontakt zu $host. $!");
my $nom; # number of messages
$nom = $pop3->login($user,$pw);
unless (defined $nom) { die("$user: Auth failed $!"); }
if ($nom > 0) {
my $msgno;
print qq~<TABLE BORDER="1">~;
foreach $msgno ( sort { $a <=> $b } keys %{$pop3->list()}) {
$mailnummer=neu;
my $subject;
my $from;
# Komplette Mail holen (Head und Body)
my $Lines = $pop3->get($msgno);
my $x;
for ($x = 0; $x <= $#$Lines; $x++) {
# Header abklappern
# Absender und Betreff einsammeln
$subject = $1 if ($Lines->[$x] =~ m/^Subject:\s+(.*)/i);
$from = $1 if ($Lines->[$x] =~ m/^From:\s+(.*)/i);
# Header und Body sind gemäss RFC durch
# eine Leerzeile getrennt.
# Raus, wenn Leerzeile
last if ($Lines->[$x] =~ m/^\s*$/);
}
unless (defined $subject) {$subject = "Kein Betreff";}
$subject =~ s/</</g;
$subject =~ s/>/>/g;
unless (defined $from) { $from = "Kein Absender";}
$from =~ s/</</g;
$from =~ s/>/>/g;
print qq~<TR><TH>Nr.</TH><TH>Absender</TH><TH>Betreff</TH><TH>Status</TH></TR>~;
###############################################################################
Inhalt öffnen, Inhalt einlesen, wieder schliessen
open(MAIN3,"./body.txt") || die $!;
@main3 = <MAIN3>;
close(MAIN3);
$x += 1;
foreach (@main3) {
$_=$text;
for (; $x <= $#$Lines; $x++) {
if ($Lines->[$x] =~ m/$text/) {
$pop3->delete($msgno);
print qq~<TR><TD>$msgno</TD><TD>$from</TD><TD>$subject</TD><TD>gel(b)</TD></TR>~;
}
}
}
###############################################################################
print qq~<TR><TD>$msgno</TD><TD>$from</TD><TD>$subject</TD><TD>behalten</TD></TR>~;
print qq~<TR><TD COLSPAN="4">~;
# $x besteht noch aus der
# obigen for-Schleife.
# Wir fangen mit der ersten Zeile
# nach dem Header an, vermutlich der Body
$x += 1;
for (; $x <= $#$Lines; $x++) {
$Lines->[$x] =~ s/</</g;
$Lines->[$x] =~ s/>/>/g;
$Lines->[$x] =~ s/\n/<BR>/g;
print $Lines->[$x];
}
# Wird auch ausgeben, wenn die Nachricht leer ist.
print "<BR>";
print qq~</TD></TR>~;
}
print qq~</TABLE>~;
} else { print qq~<H1>Sorry, no Mail</H1>~; }
print qq~</BODY></HTML>~;
$pop3->quit();
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++