diff --git a/VIRTUAL_VACATION/INSTALL.TXT b/VIRTUAL_VACATION/INSTALL.TXT index 0959f10b..95fa8ea5 100644 --- a/VIRTUAL_VACATION/INSTALL.TXT +++ b/VIRTUAL_VACATION/INSTALL.TXT @@ -101,21 +101,22 @@ Execute "postfix reload" to complete the change. ------------------- The database table should have already been created for you, by running -the 'upgrade.php' script. +the 'upgrade.php' script when installing Postfixadmin. If security is an issue for you, read ../DOCUMENTS/Security.txt -6. Edit filter.pl +6. Edit vacation.pl ----------------- -The perl filter.pl script needs minor modification to know which database +The perl vacation.pl script needs minor modification to know which database you are using, and also how to connect to the database. Namely : Change any variables starting with '$db_' and '$db_type' to either 'mysql' or 'pgsql'. - +Change the $vacation_domain variable to match what you entered in your /etc/postfix/transport +file. What do these files do? ----------------------- diff --git a/VIRTUAL_VACATION/tests/mail-myself.txt b/VIRTUAL_VACATION/tests/mail-myself.txt new file mode 100644 index 00000000..5f233bfd --- /dev/null +++ b/VIRTUAL_VACATION/tests/mail-myself.txt @@ -0,0 +1,43 @@ +Return-Path: +X-Original-To: david@example.org +Delivered-To: david@example.org +Received: by mail.palepurple.co.uk (Postfix, from userid 1007) + id 83AE0894CF8; Tue, 5 Aug 2008 20:15:53 +0100 (BST) +Received: from localhost (localhost [127.0.0.1]) + by mail.palepurple.co.uk (Postfix) with ESMTP id 4A249894CF9 + for ; Tue, 5 Aug 2008 20:15:53 +0100 (BST) +X-Virus-Scanned: by Amavis+SpamAssassin+ClamAV and more at palepurple.co.uk +X-Spam-Score: -2.836 +X-Spam-Level: +X-Spam-Status: No, score=-2.836 tagged_above=-99 required=5 tests=[AWL=-0.237, + BAYES_00=-2.599] +Received: from mail.palepurple.co.uk ([127.0.0.50]) + by localhost (oak.palepurple.co.uk [127.0.0.50]) (amavisd-new, port 10024) + with ESMTP id gHB1TKpjKIKX for ; + Tue, 5 Aug 2008 20:15:50 +0100 (BST) +Received: from irc.palepurple.co.uk (irc.palepurple.co.uk [89.16.169.131]) + by mail.palepurple.co.uk (Postfix) with ESMTP id CAF82894CF8 + for ; Tue, 5 Aug 2008 20:15:50 +0100 (BST) +Received: by irc.palepurple.co.uk (Postfix, from userid 1000) + id 8869450146; Tue, 5 Aug 2008 20:15:50 +0100 (BST) +Date: Tue, 5 Aug 2008 20:15:50 +0100 +From: David Goodwin +To: david@example.org, fred@example.org, barney@example.org, rover@example.org, + roger@example.org +Subject: test email +Message-ID: <20080805191549.GA27905@codepoets.co.uk> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +X-GnuPG-Key-URL: http://codepoets.co.uk/files/pubkey.txt +X-PGP-Key: 0x117957A6 +User-Agent: Mutt/1.5.13 (2006-08-11) +Content-Length: 136 +Lines: 7 + +hello world; this is in plain text only. + +-- +David Goodwin + +[ http://www.codepoets.co.uk ] diff --git a/VIRTUAL_VACATION/tests/teodor-smtp-envelope-headers.txt b/VIRTUAL_VACATION/tests/teodor-smtp-envelope-headers.txt new file mode 100644 index 00000000..e4633bbf --- /dev/null +++ b/VIRTUAL_VACATION/tests/teodor-smtp-envelope-headers.txt @@ -0,0 +1,21 @@ +X-Original-To: david@example.org +Delivered-To: david@example.org +X-Virus-Scanned: amavisd-new at mx.ro +From: "Teodor Iacob" +To: +Subject: estsgf +Date: Mon, 19 Jan 2009 14:49:17 +0200 +X-Mailer: Microsoft Office Outlook 11 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 +Thread-Index: Acl6NFZyC+AImZ1WQSS0cPUO/Y2FqA== +X-BRO-MailScanner-Information: Please contact the ISP for more information +X-BRO-MailScanner-ID: n0JCoUwB014357 +X-BRO-MailScanner: Found to be clean +X-MailScanner-From: david@example.org +X-BRO-MailScanner-Watermark: 1232974231.00027@11VRmWFJ18WRflEdvrILlQ + +dsgsgfsgfg + +-- + +Teodor Iacob diff --git a/VIRTUAL_VACATION/tests/test.sh b/VIRTUAL_VACATION/tests/test.sh index b324c519..ca61d5c8 100644 --- a/VIRTUAL_VACATION/tests/test.sh +++ b/VIRTUAL_VACATION/tests/test.sh @@ -14,6 +14,7 @@ export PGUSER=dg export PGDATABASE=postfix export PGHOST=pgsqlserver + echo "DELETE FROM vacation WHERE email = 'david@example.org'" | psql # First time around, there should be no vacation record for david@example.org, so these should all not cause mail to be sent. @@ -21,15 +22,29 @@ echo "DELETE FROM vacation WHERE email = 'david@example.org'" | psql echo echo "NONE OF THESE SHOULD RESULT IN MAIL BEING SENT" echo -cat mailing-list.txt | perl ../vacation.pl -t yes -f fw-general-return-20540-david=example.org@lists.zend.com -- david\#example.org@autoreply.example.org -cat test-email.txt | perl ../vacation.pl -t yes -f david1@example.org -- david\#example.org@autoreply.example.org -cat spam.txt | perl ../vacation.pl -t yes -f mary@ccr.org -- david\#example.org@autoreply.example.org -cat asterisk-email.txt | perl ../vacation.pl -t yes -f www-data@palepurple.net -- david\#example.org@autoreply.example.org -cat facebook.txt | perl ../vacation.pl -t yes -f notification+meynbxsa@facebookmail.com -- david\#example.org@autoreply.example.org -cat mail-myself.txt | perl ../vacation.pl -t yes -f david@example.org -- david\#example.org@autoreply.example.org + +#echo "On: mailing-list.txt:" +# cat mailing-list.txt | perl ../vacation.pl -t yes -f fw-general-return-20540-david=example.org@lists.zend.com -- david\#example.org@autoreply.example.org +echo "On: test-email.txt:" +cat test-email.txt | perl ../vacation.pl -t yes -f david1@example.org -- david\#example.org@autoreply.example.org +echo "On: spam.txt:" +cat spam.txt | perl ../vacation.pl -t yes -f mary@ccr.org -- david\#example.org@autoreply.example.org +echo "On: asterisk-email.txt:" +cat asterisk-email.txt | perl ../vacation.pl -t yes -f www-data@palepurple.net -- david\#example.org@autoreply.example.org +# do not reply to facebook +echo "On: facebook.txt:" +cat facebook.txt | perl ../vacation.pl -t yes -f notification+meynbxsa@facebookmail.com -- david\#example.org@autoreply.example.org +# do not send yourself a vacation notice. +echo "On: mail-myself.txt:" +cat mail-myself.txt | perl ../vacation.pl -t yes -f david@example.org -- david\#example.org@autoreply.example.org +# do not send yourself a vacation notice. +echo "On: teodor-smtp-envelope-headers.txt:" +cat teodor-smtp-envelope-headers.txt | perl ../vacation.pl -t yes -f david@example.org -- david\#example.org@autoreply.example.org + echo "INSERT INTO vacation (email, subject, body, created, active, domain) VALUES ('david@example.org', 'I am on holiday', 'Yeah, that is right', NOW(), true, 'example.org')" | psql + echo echo "VACATION TURNED ON " echo @@ -46,4 +61,3 @@ cat facebook.txt | perl ../vacation.pl -t yes -f notification+meynbxsa@facebookm echo " * Mailing myself - should not send vacation message" cat mail-myself.txt | perl ../vacation.pl -t yes -f david@example.org -- david\#example.org@autoreply.example.org echo -echo diff --git a/VIRTUAL_VACATION/vacation.pl b/VIRTUAL_VACATION/vacation.pl index 7fac0565..903c7a1d 100644 --- a/VIRTUAL_VACATION/vacation.pl +++ b/VIRTUAL_VACATION/vacation.pl @@ -1,6 +1,7 @@ #!/usr/bin/perl -w # # Virtual Vacation 4.0 +# $Revision$ # Originally by Mischa Peters # # Copyright (c) 2002 - 2005 High5! @@ -152,6 +153,7 @@ use Log::Log4perl qw(get_logger :levels); my ($from, $to, $cc, $replyto , $subject, $messageid, $lastheader, $smtp_sender, $smtp_recipient, %opts, $spam, $test_mode, $logger); $subject=''; +$messageid='unknown'; # Setup a logger... # @@ -391,7 +393,7 @@ sub send_vacation_email { 'Message' => encode_base64($body) ); if($test_mode == 1) { - $logger->info("** TEST MODE ** : Vacation response sent to $to from $from subject $subject - NOT sent\n"); + $logger->info("** TEST MODE ** : Vacation response sent to $to from $from subject $subject (not) sent\n"); $logger->info(%mail); return 0; } @@ -410,13 +412,28 @@ sub strip_address { } my @ok; $logger = get_logger(); - for (split(/,\s*/, lc($arg))) { - my $temp = Email::Valid->address($_); + my @list; + @list = $arg =~ m/([\w\.\-\']+\@[\w\.\-]+\w+)/g; + foreach(@list) { + #$logger->debug("Checking: $_"); + my $temp = Email::Valid->address( -address => $_, -mxcheck => 0); if($temp) { push(@ok, $temp); } + else { + $logger->debug("Email not valid : $Email::Valid::Details"); + } + } + # remove duplicates + my %seen = (); + my @uniq; + my $item; + foreach $item (@ok) { + push(@uniq, $item) unless $seen{$item}++ } - my $result = join(", ", @ok); + + my $result = join(", ", @uniq); + #$logger->debug("Result: $result"); return $result; } @@ -459,6 +476,7 @@ sub check_and_clean_from_address { $cc = ''; $replyto = ''; +$logger->debug("Script argument SMTP recipient is : '$smtp_recipient' and smtp_sender : '$smtp_sender'"); while () { last if (/^$/); if (/^\s+(.*)/ and $lastheader) { $$lastheader .= " $1"; next; } @@ -495,7 +513,7 @@ if(!$from || !$to || !$messageid || !$smtp_sender || !$smtp_recipient) { $logger->info("One of from=$from, to=$to, messageid=$messageid, smtp sender=$smtp_sender, smtp recipient=$smtp_recipient empty"); exit(0); } - +$logger->debug("Email headers have to: '$to' and From: '$from'"); $to = strip_address($to); $from = lc ($from); $from = check_and_clean_from_address($from);