From e81fd3702d6bf2a2e244ccbd0104279e5817e295 Mon Sep 17 00:00:00 2001 From: Peter Baumann Date: Tue, 4 Jun 2013 15:36:45 +0200 Subject: [PATCH] added more mail scripts --- mail/IMAPCopySrc.zip | Bin 0 -> 25184 bytes mail/notify_by_sms2email | 99 ++++++ mail/search maillogs/findrecpt.pl | 132 ++++++++ mail/search maillogs/findsender.pl | 157 +++++++++ mail/search maillogs/prepflog-0.4.tgz | Bin 0 -> 5911 bytes mail/smtp-client.pl | 445 ++++++++++++++++++++++++++ mail/smtp_auth.zip | Bin 0 -> 4381 bytes 7 files changed, 833 insertions(+) create mode 100755 mail/IMAPCopySrc.zip create mode 100755 mail/notify_by_sms2email create mode 100755 mail/search maillogs/findrecpt.pl create mode 100755 mail/search maillogs/findsender.pl create mode 100755 mail/search maillogs/prepflog-0.4.tgz create mode 100755 mail/smtp-client.pl create mode 100755 mail/smtp_auth.zip diff --git a/mail/IMAPCopySrc.zip b/mail/IMAPCopySrc.zip new file mode 100755 index 0000000000000000000000000000000000000000..ae1defc4033f412affd8c957c08e00425294c736 GIT binary patch literal 25184 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 literal 0 HcmV?d00001 diff --git a/mail/notify_by_sms2email b/mail/notify_by_sms2email new file mode 100755 index 0000000..32d4f9e --- /dev/null +++ b/mail/notify_by_sms2email @@ -0,0 +1,99 @@ +#!/bin/sh +# +# Sample script to send an SMS email notifcation to SMS2Email's HTTP gateways + +# Username and password associated with SMS2Email account +# Modify these values to match your account credentials if you don't want to +# specify them as command line arguments. +username= +password= + +number= +message="Test message" + + + +# Show usage if necessary +if [ $# -eq 0 ]; then + echo "Usage: $0 -n [number] -m [message] -u [username] -p [password]"; + echo ""; + echo "[number] = SMS number to send message to"; + echo "[message] = Text of message you want to send"; + echo "[username] = Username assocated with SMS2Email account"; + echo "[password] = Password assocated with SMS2Email account"; + echo " Both the username and password options are optional and"; + echo " override the account credentials defined in this script."; + echo ""; + exit 1; +fi + + +# Get command line arguments +while [ "$1" != "" ] ; do + case $1 + in + -n) + # Get the SMS number that we should send message to + number=$2; + shift 2; + ;; + -m) + # Get the message we should send + message=$2; + shift 2; + ;; + -u) + # Get the username + username=$2; + shift 2; + ;; + -p) + # Get the password + password=$2; + shift 2; + ;; + *) + echo "Unknown option: $1" + exit 1; + ;; + esac +done + + +# We haven't sent the message yet +message_sent_ok=0; + +# Try to send an HTTP POST message (try all servers until successful) +for server in gw1 gw11 gw2 gw22; do + + RESPONSE=`curl -s -d username=$username -d password=$password -d to_num=$number -d message="$message" http://$server.sms2email.com/sms/postmsg.php` + + # Curl was able to post okay... + if [ "$?" -eq "0" ]; then + + # Test the response from the SMS2Email server + case $RESPONSE + in + AQSMS-OK) + # Message was queued ok + mesage_sent_ok=1; + echo "Message posted OK to HTTP gateway $server" + exit 0; + ;; + AQSMS*) + # Some kind of fatal error occurred + echo "Fatal error received from HTTP gateway $server: $RESPONSE" + exit 1; + ;; + *) + # No response or invalid response + ;; + esac + + fi + +done + + + + diff --git a/mail/search maillogs/findrecpt.pl b/mail/search maillogs/findrecpt.pl new file mode 100755 index 0000000..7af4929 --- /dev/null +++ b/mail/search maillogs/findrecpt.pl @@ -0,0 +1,132 @@ +#!/usr/bin/perl -w +# +# Name: checkrecpt.pl +# Purpose: Checks a specified postfix maillog for a specified sender +# email address and returns a list of recipients email addresses +# to which email was sent. +# Author: David Miller -- +# Version: 0.04 +# Created: 23 Jul 2002 +# Modified: 24 Jul 2002 -- Optimization of message id array to eliminate +# processing of duplicates. Accepts commandline parameters. +# Modified: 24 Jul 2002 -- Cleanup and optimization of message search loop. +# Modified: 25 Jul 2002 -- Added code to handle 'expired' reporting. +# +# +use strict; + +#-------------- +# variables +#-------------- +my $maillog; +my $sender; +my @msgids; + +#--------------------------- +# Main Thread of Execution +#--------------------------- +# process command line arguments +usage() unless ($#ARGV > 0 && $#ARGV < 2); +$sender = $ARGV[0]; +$maillog = $ARGV[1]; + +# check sender name for basically valid form +if (! ($sender =~ /.*@.*/)) { + print "Sender address $sender does not appear valid\n"; + exit 1; +} + +# test for existance of maillog +if(! -r $maillog) { + print "Can not find mail log $maillog\n"; + exit 1; +} + +# get all message ids associated with the sender in temporary array +my @temp; +open(LOG, "<$maillog") || die "Open of $maillog failed\n"; +while() { + if(/from=<$sender>/) { + my @fields = split " "; + $fields[5] =~ s/://; + $temp[$#temp + 1] = $fields[5]; + } +} +close(LOG); + +# optimize list by sorting and removing duplicates +@temp = sort @temp; +foreach my $msg (@temp) { + if($#msgids < 0) { + $msgids[0] = $msg; + } elsif ($msgids[$#msgids] ne $msg) { + $msgids[$#msgids + 1] = $msg; + } +} + +# display count of messages and display header if there are messages +# if no messages we are done +print "Found " . ($#msgids + 1) . " messages from $sender in $maillog\n"; +printMessageHeader() if ($#msgids >= 0) || exit 0; + +# Lookup recipients for each message id +open(LOG, "<$maillog") || die "Open of $maillog failed\n"; +foreach my $msg (@msgids) { + while() { + chomp(); + if(/$msg/ && /smtp/ && /to=,$//; + # status + if($fields[9] =~ /^status=/) { + $status = $fields[9]; + } + $status =~ s/^status=//; + # display the message info + print "$msg $status \t$fields[6]"; + if(($status eq "bounced") || ($status eq "deferred")) { + print " $fields[10]"; + } + print "\n"; + # loop optimization + last if ($status eq "bounced"); + } elsif (/$msg/ && /status=expired/) { # handle exired messages + my $status; + my @fields = split " ", $_, 9; + # sender address for return + $fields[6] =~ s/^from=,$//; + # status field + if($fields[7] =~ /^status=/) { + $status = $fields[7]; + } + $status =~ s/^status=//; + $status =~ s/,$//; + # display the message info + print "$msg $status \t<$fields[8]>\t\t$fields[6]\n"; + last; + } + } + seek LOG, 0, 0; +} +close(LOG); +exit 0; + +#---------------- +# Sub Routines +#---------------- +sub usage +{ + print "usage: $0 sender maillog\n"; + exit 0; +} + +sub printMessageHeader +{ + print "Checking for message recipients\n\n"; + print "Message ID Status \tRecipient\n"; + print "----------------------------------------------------------------\n"; +} diff --git a/mail/search maillogs/findsender.pl b/mail/search maillogs/findsender.pl new file mode 100755 index 0000000..ca1b530 --- /dev/null +++ b/mail/search maillogs/findsender.pl @@ -0,0 +1,157 @@ +#!/usr/bin/perl -w +# +# Name: findsender.pl +# Purpose: Checks a specified postfix maillog for a specified recipient +# email address and returns a list of sender's email addresses +# to which email was sent. +# Author: David Miller -- <> +# Version: 0.01 +# Created: 25 Jul 2002 +# Modified: for additional syslog formats, +# +use strict; + +#-------------- +# variables +#-------------- +my $debug = 0; +my $maillog; +my $recipient; +my @msgids; +my $msg; +my @fields; + +my $qid; # field numbers within $maillog +my $nrcpts; +my $sender; +my $size; + +#--------------------------- +# Main Thread of Execution +#--------------------------- +# process command line arguments +usage() unless (@ARGV == 2); +$recipient = $ARGV[0]; +$maillog = $ARGV[1]; + +# check sender name for basically valid form +if (! ($recipient =~ /.+@.+/)) { + print "Recipient address $recipient does not appear valid\n"; + exit 1; +} +# test for existence of maillog +if(! -r $maillog) { + print "Can not find mail log $maillog\n"; + exit 1; +} + +# get all message ids associated with the recipient in temporary array +my @temp; +open(LOG, "<$maillog") || die "Initial open of $maillog failed\n"; +while() { + # on the fly, determine log line format (where various fields are) + unless (defined $nrcpts) { + if(/from=) { + chomp(); + if(/$msg/ && /from=,$/) { + $fields[$sender] = "<>"; + } else { + $fields[$sender] =~ s/^from=<(.+)>,$/$1/; # keep just the addr + } + $fields[$size] =~ s/^size=(\d+),$/$1/; # keep just the number + $fields[$nrcpts] =~ s/^nrcpts?=(\d+),?$/$1/; # keep just the number + # display the message info + write; + last; + } + } + unless ($msg eq $msgids[-1]) { # in which case we're done + seek LOG, 0, 0 && die "Seek/rewind failed: $!"; + } +} +close(LOG); +exit 0; + +format = +@<<<<<<<<<<<<<< @>>>>>> @> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +$msg, $fields[$size], $fields[$nrcpts], $fields[$sender] +. + +#---------------- +# Sub Routines +#---------------- +sub usage +{ + print "usage: $0 recipient maillog\n"; + exit 0; +} + +sub printMessageHeader +{ + print "Checking for message senders\n\n"; + print "Message ID Size Rcpts Sender\n"; + print "-"x70, "\n"; +} + +sub find_fromline_fields +{ + my @fields = @_; + + for my $i (0 .. $#fields) { + unless (defined $qid) { + if ($fields[$i] =~ /^[A-Za-z\d]+:$/) { # alphanum+colon + $qid = $i; + print if ($debug > 1); + print "DEBUG: \$qid\t= $qid\n" if ($debug); + } + } + if ($fields[$i] =~ /from=/) { + $sender = $i; + print if ($debug > 1); + print "DEBUG: \$sender\t= $sender\n" if ($debug); + } elsif ($fields[$i] =~ /size=/) { + $size = $i; + print if ($debug > 1); + print "DEBUG: \$size\t= $size\n" if ($debug); + } elsif ($fields[$i] =~ /nrcpts?=/) { + $nrcpts = $i; + print if ($debug > 1); + print "DEBUG: \$nrcpts\t= $nrcpts\n" if ($debug); + } + } +} + diff --git a/mail/search maillogs/prepflog-0.4.tgz b/mail/search maillogs/prepflog-0.4.tgz new file mode 100755 index 0000000000000000000000000000000000000000..b883b9ef2768162b153df2832bbcee630480488e GIT binary patch literal 5911 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 literal 0 HcmV?d00001 diff --git a/mail/smtp-client.pl b/mail/smtp-client.pl new file mode 100755 index 0000000..90730c1 --- /dev/null +++ b/mail/smtp-client.pl @@ -0,0 +1,445 @@ +#!/usr/bin/perl + +# +# Simple SMTP client with STARTTLS and AUTH support. +# Michal Ludvig , 2003-2006 +# See http://www.logix.cz/michal/devel/smtp for details. +# Thanks to all contributors for ideas and fixes! +# + +# +# This program can be freely distributed, used and modified +# without any restrictions. It's a public domain. +# + +use strict; +use IO::Socket::INET; +use IO::Socket::SSL; +use Net::SSLeay; +use Digest::HMAC_MD5 qw(hmac_md5_hex); +use MIME::Base64 qw(encode_base64 decode_base64); +use Getopt::Long; +use Term::ReadKey; +use Socket qw(:DEFAULT :crlf); + +my ($user, $pass, $host, $port, + $use_login, $use_plain, $use_cram_md5, $use_digest_md5, + $ehlo_ok, $auth_ok, $starttls_ok, $verbose, + $hello_host, $from, @to, $datasrc); + +$host = 'localhost'; +$port = 'smtp(25)'; +$hello_host = 'localhost'; +$verbose = 0; +$use_login = 0; +$use_plain = 0; +$use_cram_md5 = 0; +$use_digest_md5 = 0; +$starttls_ok = 1; +$auth_ok = 0; +$ehlo_ok = 1; + +# Get command line options. +GetOptions ('host=s' => \$host, 'server=s' => \$host, + 'port=i' => \$port, + 'user=s' => \$user, 'password=s' => \$pass, + 'auth-login' => \$use_login, + 'auth-plain' => \$use_plain, + 'auth-cram-md5' => \$use_cram_md5, + 'auth-digest-md5' => \$use_digest_md5, + 'disable-ehlo' => sub { $ehlo_ok = 0; }, + 'force-ehlo' => sub { $ehlo_ok = 2; }, + 'hello-host|ehlo-host|helo-host=s' => \$hello_host, + 'enable-auth' => \$auth_ok, + 'disable-starttls|disable-tls|disable-ssl' => + sub { $starttls_ok = 0; }, + 'from|mail-from=s' => \$from, + 'to|rcpt-to=s' => \@to, + 'data=s' => \$datasrc, + 'verbose:1' => \$verbose, + 'help' => sub { &usage() } ); + +if ($host =~ /^(.*):(.*)$/) +{ + $host = $1; + $port = $2; +} + +# If at least one --auth-* option was given, enable AUTH. +if ($use_login + $use_plain + $use_cram_md5 + $use_digest_md5 > 0) + { $auth_ok = 1; } + +# If --enable-auth was given, enable all AUTH methods. +elsif ($auth_ok && ($use_login + $use_plain + $use_cram_md5 + + $use_digest_md5 == 0)) +{ + $use_login = 1; + $use_plain = 1; + $use_cram_md5 = 1; + $use_digest_md5 = 1; +} + +# Exit if user haven't specified username for AUTH. +if ($auth_ok && !defined ($user)) + { die ("You requested SMTP AUTH support. Consider using --user switch as well.\n"); } + +# Ask for password if it wasn't supplied on the command line. +if ($auth_ok && defined ($user) && !defined ($pass)) +{ + printf ("Enter password for %s@%s : ", $user, $host); + # Set echo off. + ReadMode (2); + $pass = <>; + # Restore echo. + ReadMode (0); + printf ("\n"); + + exit if (! defined ($pass)); + chop ($pass); +} + +# Connect to the SMTP server. +my $sock = IO::Socket::INET->new( + PeerAddr => $host, + PeerPort => $port, + Proto => 'tcp', + Timeout => 5) + or die ("Connect failed: $@\n"); + +my ($code, $text); +my (%features); + +# Wait for the welcome message of the server. +($code, $text) = &get_line ($sock); +die ("Unknown welcome string: '$code $text'\n") if ($code != 220); +$ehlo_ok-- if ($text !~ /ESMTP/); + +# Send EHLO +&say_hello ($sock, $ehlo_ok, $hello_host, \%features) or exit (1); + +# Run the SMTP session +&run_smtp (); + +# Good bye... +&send_line ($sock, "QUIT\n"); +($code, $text) = &get_line ($sock); +die ("Unknown QUIT response '$code'.\n") if ($code != 221); + +exit 0; + +# This is the main SMTP "engine". +sub run_smtp +{ + # See if we could start encryption + if ((defined ($features{'STARTTLS'}) || defined ($features{'TLS'})) && $starttls_ok) + { + printf ("Starting TLS...\n") if ($verbose >= 1); + + # Do Net::SSLeay initialization + Net::SSLeay::load_error_strings(); + Net::SSLeay::SSLeay_add_ssl_algorithms(); + Net::SSLeay::randomize(); + + &send_line ($sock, "STARTTLS\n"); + ($code, $text) = &get_line ($sock); + die ("Unknown STARTTLS response '$code'.\n") if ($code != 220); + + if (! IO::Socket::SSL::socket_to_SSL($sock, + SSL_version => 'SSLv3 TLSv1')) + { + die ("STARTTLS: ".IO::Socket::SSL::errstr()."\n"); + } + + if ($verbose >= 1) + { + printf ("Using cipher: %s\n", $sock->get_cipher ()); + printf ("%s", $sock->dump_peer_certificate()); + } + + # Send EHLO again (required by the SMTP standard). + &say_hello ($sock, $ehlo_ok, $hello_host, \%features) or return 0; + } + + # See if we should authenticate ourself + if (defined ($features{'AUTH'}) && $auth_ok) + { + if ($verbose >= 1) + { + printf ("AUTH method (%s): ", $features{'AUTH'}); + } + + # Try CRAM-MD5 if supported by the server + if ($features{'AUTH'} =~ /CRAM-MD5/i && $use_cram_md5) + { + printf ("using CRAM-MD5\n") if ($verbose >= 1); + &send_line ($sock, "AUTH CRAM-MD5\n"); + ($code, $text) = &get_line ($sock); + if ($code != 334) + { + warn ("AUTH failed '$code $text'.\n"); + return 0; + } + + my $response = &encode_cram_md5 ($text, $user, $pass); + &send_line ($sock, "%s\n", $response); + ($code, $text) = &get_line ($sock); + if ($code != 235) + { + warn ("AUTH failed: '$code'.\n"); + return 0; + } + } + # Or try LOGIN method + elsif ($features{'AUTH'} =~ /LOGIN/i && $use_login) + { + printf ("using LOGIN\n") if ($verbose >= 1); + &send_line ($sock, "AUTH LOGIN\n"); + ($code, $text) = &get_line ($sock); + if ($code != 334) + { + warn ("AUTH failed '$code $text'.\n"); + return 0; + } + + &send_line ($sock, "%s\n", encode_base64 ($user, "")); + + ($code, $text) = &get_line ($sock); + if ($code != 334) + { + warn ("AUTH failed '$code $text'.\n"); + return 0; + } + + &send_line ($sock, "%s\n", encode_base64 ($pass, "")); + + ($code, $text) = &get_line ($sock); + if ($code != 235) + { + warn ("AUTH failed '$code $text'.\n"); + return 0; + } + } + # Or finally PLAIN if nothing else was supported. + elsif ($features{'AUTH'} =~ /PLAIN/i && $use_plain) + { + printf ("using PLAIN\n") if ($verbose >= 1); + &send_line ($sock, "AUTH PLAIN %s\n", + encode_base64 ("$user\0$user\0$pass", "")); + ($code, $text) = &get_line ($sock); + if ($code != 235) + { + warn ("AUTH failed '$code $text'.\n"); + return 0; + } + } + # Complain otherwise. + else + { + warn ("No supported authentication method\n". + "advertised by the server.\n"); + return 0; + } + + if ($verbose >= 1) + { printf ("Authentication of $user\@$host succeeded\n"); } + } + + # We can do a relay-test now if a recipient was set. + if ($#to >= 0) + { + if (!defined ($from)) + { + warn ("From: address not set. Using empty one.\n"); + $from = ""; + } + &send_line ($sock, "MAIL FROM: <%s>\n", $from); + ($code, $text) = &get_line ($sock); + if ($code != 250) + { + warn ("MAIL FROM failed: '$code $text'\n"); + return 0; + } + + my $i; + for ($i=0; $i <= $#to; $i++) + { + &send_line ($sock, "RCPT TO: <%s>\n", $to[$i]); + ($code, $text) = &get_line ($sock); + if ($code != 250) + { + warn ("RCPT TO <".$to[$i]."> ". + "failed: '$code $text'\n"); + return 0; + } + } + } + + # Wow, we should even send something! + if (defined ($datasrc)) + { + if ($datasrc eq "-") + { + *MAIL = *STDIN; + } + elsif (!open (MAIL, $datasrc)) + { + warn ("Can't open file '$datasrc'\n"); + return 0; + } + + &send_line ($sock, "DATA\n"); + ($code, $text) = &get_line ($sock); + if ($code != 354) + { + warn ("DATA failed: '$code $text'\n"); + return 0; + } + + while () + { + my $line = $_; + $line =~ s/^\.$CRLF$/\. $CRLF/; + $line =~ s/^\.\n$/\. $CRLF/; + $sock->print ($line); + } + + close (MAIL); + + $sock->printf ("$CRLF.$CRLF"); + + ($code, $text) = &get_line ($sock); + if ($code != 250) + { + warn ("DATA not send: '$code $text'\n"); + return 0; + } + } + + # Perfect. Everything succeeded! + return 1; +} + +# Get one line of response from the server. +sub get_one_line ($) +{ + my $sock = shift; + my ($code, $sep, $text) = ($sock->getline() =~ /(\d+)(.)([^\r]*)/); + my $more; + $more = ($sep eq "-"); + if ($verbose) + { printf ("[%d] '%s'\n", $code, $text); } + return ($code, $text, $more); +} + +# Get concatenated lines of response from the server. +sub get_line ($) +{ + my $sock = shift; + my ($code, $text, $more) = &get_one_line ($sock); + while ($more) { + my ($code2, $line); + ($code2, $line, $more) = &get_one_line ($sock); + $text .= " $line"; + die ("Error code changed from $code to $code2. That's illegal.\n") if ($code ne $code2); + } + return ($code, $text); +} + +# Send one line back to the server +sub send_line ($@) +{ + my $socket = shift; + my @args = @_; + + if ($verbose) + { printf ("> "); printf (@args); } + $args[0] =~ s/\n/$CRLF/g; + $socket->printf (@args); +} + +# Helper function to encode CRAM-MD5 challenge +sub encode_cram_md5 ($$$) +{ + my ($ticket64, $username, $password) = @_; + my $ticket = decode_base64($ticket64) or + die ("Unable to decode Base64 encoded string '$ticket64'\n"); + + my $password_md5 = hmac_md5_hex($ticket, $password); + return encode_base64 ("$username $password_md5", ""); +} + +# Store all server's ESMTP features to a hash. +sub say_hello ($$$$) +{ + my ($sock, $ehlo_ok, $hello_host, $featref) = @_; + my ($feat, $param); + my $hello_cmd = $ehlo_ok > 0 ? "EHLO" : "HELO"; + + &send_line ($sock, "$hello_cmd $hello_host\n"); + my ($code, $text, $more) = &get_one_line ($sock); + + if ($code != 250) + { + warn ("$hello_cmd failed: '$code $text'\n"); + return 0; + } + + # Empty the hash + %{$featref} = (); + + ($feat, $param) = ($text =~ /^(\w+)[= ]*(.*)$/); + $featref->{$feat} = $param; + + # Load all features presented by the server into the hash + while ($more == 1) + { + ($code, $text, $more) = &get_one_line ($sock); + ($feat, $param) = ($text =~ /^(\w+)[= ]*(.*)$/); + $featref->{$feat} = $param; + } + + return 1; +} + +sub usage () +{ + printf ("Simple SMTP client written in Perl that supports some +advanced features like STARTTLS and AUTH. + +Author: Michal Ludvig (c) 2003-2006 + http://www.logix.cz/michal/devel/smtp + +Usage: smtp-client.pl [--options] + + --host= Host name or address of the SMTP server. + (default: localhost) + --port= Port where the SMTP server is listening. + (default: 25) + + --hello-host= String to use in the EHLO/HELO command. + --disable-ehlo Don't use ESMTP EHLO command, only HELO. + --force-ehlo Use EHLO even if server doesn't say ESMTP. + + --disable-starttls Don't use encryption even if the remote + host offers it. + + --enable-auth Enable all methods of SMTP authentication. + --auth-login Enable only AUTH LOGIN method. + --auth-plain Enable only AUTH PLAIN method. + --auth-cram-md5 Enable only AUTH CRAM-MD5 method. + --user= Username for SMTP authentication. + --pass= Corresponding password. + + --from=
Address to use in MAIL FROM command. + --to=
Address to use in RCPT TO command. + + --data= Name of file to send after DATA command. + With \"--data=-\" the script will read + standard input (useful e.g. for pipes). + + --verbose[=] Be more verbose, print the SMTP session. + --help Guess what is this option for ;-) +"); + exit (0); +} + diff --git a/mail/smtp_auth.zip b/mail/smtp_auth.zip new file mode 100755 index 0000000000000000000000000000000000000000..6da16d31b0d9a8f25b98047c1631270300c108f1 GIT binary patch literal 4381 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