#!/usr/bin/perl -w
# <@LICENSE>
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at:
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# </@LICENSE>

use strict;

use FindBin;
use lib "$FindBin::Bin/../lib";
use Mail::SpamAssassin;

my $spamtest = Mail::SpamAssassin->new({
    rules_filename => 'rules',
    dont_copy_prefs => 1,
    local_tests_only => 1,
    debug => 0,
    paranoid => 0,
});

for($_=shift @ARGV; defined($_); $_=shift @ARGV)
{
	open (FILE, "<$_");
	my $mail = $spamtest->parse (\*FILE);
	close(FILE);

	my $status = $spamtest->check($mail);
        print $status->get_hits," $_ ",$status->get_names_of_tests_hit,"\n";
	$status->finish();
	$mail->finish();
}
