Norbert: pop3 emailbody durchsuchen

Beitrag lesen

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();

}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++