Spam-Mailstatistik

Spam-Mailstatistik

am 09.10.2007 16:08:09 von Erik Griffin

Hallo!

Ich habe hier eine Datei (im folgenden spam.txt genannt) von ca. 2,5GB
mit 296453 Spam-Mails. Format ist Seamonkey/Mozilla - also ähnelt sehr
dem mbox-Format. Nun würde ich gern wissen an welche E-Mail-Adresse
wieviele SPAM's gegangen sind. Dazu habe ich folgendes gemacht:

grep ^To: spam.txt | \
tr A-Z a-z | \
sed 's/^to: //g;s/^ sort | \
uniq -c

Jedoch habe ich immer noch komische Artefakte, die ich durch mein
Regelwerk nicht abgefangen bzw. womöglich erst dadurch erzeugt habe. Ich
möchte also die Anzahl der SPAM-Mails für jede Empfängeradresse
ermitteln. Jemand eine Idee dazu?

Problem sind u.a. folgende Kombinationen ein- und derselben
Empfängeradresse:

To: user@domain.de
To: "user@domain.de"
To:
To: user@domain.de
To: "foo bar"
To: =?iso-8859-1?...?=
To: user@domain.de, andereruser@domain.de, andereruser@anderedomain.de

und Kombinationen daraus. Bei letzterem Fall hatte ich überlegt das ","
einfach durch einen "\n" zu ersetzen und dann die Mail-Adressen einzeln
zu behandeln...

Grund des ganzen: Ich möchte einige Mailadresse ändern/deaktivieren, da
mittlerweile ein Mailaufkommen von >900Mails/Tag trotz Filterung
irgendwie nervt.


mfg
Erik

X'Post de.comp.os.unix.shell, de.comp.lang.perl.misc, ger.ct
F'up2 ger.ct

Re: Spam-Mailstatistik

am 29.10.2007 02:55:01 von das-mehdorn

Hallo!

[Follow-Up ignoriert, da ich die andere Hierarchie nicht lese]

* Erik Griffin :

> mbox-Format. Nun würde ich gern wissen an welche E-Mail-Adresse
> wieviele SPAM's gegangen sind.

Ich würde zum Holen der Header Email::Folder und Email::Simple
benutzen, vielleicht so:

use Email::Folder;

my $box = Email::Folder->new("spam.mbox");
my @raw_to = map { $_->header("To") } $box->messages;

Unter der Annahme, daß du keine fiesen Adressen mit gequoteten
Leerzeichen etc. hast, könnte man nun mit m{} und einer groben Heuristik
weitermachen:

my @to;
foreach (@raw_to) {
my @tos = m{([^ <>",=]+@[^ <>",=]+};
# ggf. @tos unique machen
push(@to, @tos);
}

Und nun könnte man einfach mal @to sortieren und durchzählen, wie oft
welche Adresse verkommt.

> Grund des ganzen: Ich möchte einige Mailadresse ändern/deaktivieren, da
> mittlerweile ein Mailaufkommen von >900Mails/Tag trotz Filterung
> irgendwie nervt.

Viel einfacher wäre es aber, wenn du deinem Mailserver beibringst,
ein "Envelope-To" in den Header zu schreiben. Der hat dann ein festes,
leicht parsbares Format und kann außerdem schlecht vom Spammer gefälscht
werden. Was wirklich im "To:" steht, muß schließlich nicht zu deinen
Adressen passen.

Christoph

--
"President Bush has been silent on Schwarzenegger.
Of course, he can't pronounce Schwarzenegger."
(David Letterman)