#!/bin/bash
# $Id: arcmail,v 1.58 2015/06/18 18:45:15 fulford Exp $
# $Source: /src/merlin/usr/local/etc/RCS/arcmail,v $
# $Revision: 1.58 $
# Author C W Fulford.
# Copyright 2015 (c) C W Fulford.
# Licensed for public use under the LGPL, .
# For assistance contact fulford@fulford.net 0709 229 5385
########################################################################
cmd=`basename $0`
chkmail=`dirname $0`/chkmail
ver=`echo "$Id: arcmail,v 1.58 2015/06/18 18:45:15 fulford Exp $"|awk '{print $3,$4,$5}'`
syntax="$cmd [[-c <configfile>] [-d] [-i <company_id>] [-l] [-m <max>] [-v] <email_address>]|[-V]"
while [ $# -gt 0 ] ;do
case $1 in
-c) if [ -f "$2" ];then
config=$2;shift 2
else
echo "$cmd: can't find $2">&2;exit 1
fi;;
-d) set -x;debug=0;shift;;
-i) co=$2;shift 2;;
-l) log=:; shift;;
-m) cbrianax=$2;shift 2;;
-v) verbose=:;shift;;
-V) echo "$cmd $Revision: 1.58 $ $Date: 2015/06/18 18:45:15 $"|awk '{print $1,$3,$6}';exit;;
[^-]*@*) ma=$1;shift;;
*)echo "$syntax">&2; exit 1;;
esac
done
[ "$ma" ] ||{ echo "$syntax" >&2;exit 1;}
expr "$ma" : ".*@[^\.]*\.[^\.]*">/dev/null ||{
echo "$ma is not a valid e-mail address" >&2
exit 1
}
md=`echo $ma|awk -F@ '{print $2}'`
getent hosts $md 2>&1 >/dev/null ||{
echo "$cmd can't find IP address for $md">&2
exit
}
mu=`echo $ma|awk -F@ '{print $1}'`
# Look for a configuration file
for f in $config /usr/local/etc/arcmail.cf /usr/local/etc/chkmail.cf ;do
[ -r $f ] && { config=$f; break ;}
done
# If none found exit
[ -r $config ] ||{ echo "$cmd: Can\'t find configuration"; exit ;}
# Get configuration
eval `sed <$config -ne "/^$ma:/,/^$/{/^[\t ]*[^#].*=.*/p}"`
max=${max:-4500}
max=${cbrianax:-$max}
basedir=${basedir:-/var/qmail/mailnames}
maildir=`echo "$basedir/$md/$mu/Maildir"`
archf=$maildir/.Archive
proto=${proto:-ssh}
tmp=/tmp/$cmd$$
[ "$max" -ge 0 ] >/dev/null 2>&1 ||{
echo "$cmd: max must be set to a positive integer" >&2
exit 1
}
[ "$log" ] && {
[ -n "$co" ]||{
echo "$cmd: Warning - company id required for reporting" >&2
}
}
[ "$verbose" ] && echo "$cmd: maximum messages set to $max."
[ "$verbose" ]&& echo "$cmd: connecting to $md."
[ "$proto" == "ssh" ] && connect=ssh
c=`$connect $md "sudo bash -c \"
if [ -d $maildir/cur ];then
cd $maildir/cur
ls -lt
else
echo $maildir not found on $md >&2;exit 1
fi\"
"| sed -e '/^total/d'|tee $tmp | wc -l`
[ $c -eq 0 ] && exit
[ "$c" -le $max ] && {
echo "$cmd: $mu has $c current messages only" >&2
exit 1
}
f=`expr $max + 1`
[ "$verbose" ] &&{
echo "$cmd: moving `expr $c - $max` messages for $mu."
}
years=`cat $tmp|sed -ne ''$f',$p'|awk '$8 !~ /:/ {print $8 }END{print strftime("%Y",systime())}'|uniq`
ssh $md "sudo bash -c \"[ -d $archf ] ||{
[ $verbose ] && echo $cmd: creating $archf
mkdir -m 700 $archf
chown -R popuser.popuser $archf ;}\"
"
for yr in $years;do
archive=$archf.$yr
ssh $md "sudo bash -c \"[ -d $archive ] ||{
[ $verbose ] && echo $cmd: creating $archive
mkdir -p -m 700 $archive/{cur,new,tmp}
touch $archive/maildirfolder
chmod 600 $archive/maildirfolder
chown -R popuser.popuser $archive ;}\"
"
done
cat $tmp|sed -ne ''$f',$p'|
awk -v cmd=$cmd: -v v=$verbose 'BEGIN{yr=strftime("%Y",systime())}{
if($8 !~ /:/){ayr=$8} else {ayr=yr}
printf("ssh '$md' sudo mv '$maildir'/cur/"$9 " '$archf'."ayr"/cur")|"sh";close("sh")
mvd[ayr]++
}END{
if(v){
for (c in mvd){
print(cmd,mvd[c],"messages moved to",c,"archive.")
}
}
}'
etot=`ssh $md "sudo find $maildir/cur -type f" |wc -l`
mtot=`expr $c - $etot`
[ "$verbose" ]&&{
echo "$cmd: $etot messages remain in $mu's current INBOX at $md."
}
[ "$log" ]&&{
logger -p mail.notice -t $cmd "$mtot messages archived for $ma at $co"
logger -p mail.notice -t $cmd "$etot messages remaining for $ma INBOX at $co"
if [ -x $chkmail ];then
$chkmail -l $ma
else
echo -e "$cmd: Can\'t update log files, you may need to run \"chkmail -l <user_id>\"" >&2
fi
}
rm $tmp
######################################################################
# This program is free software: you can redistribute it and or #
# modify it under the terms of the Lesser GNU General Public License #
# as published by the Free Software Foundation, either version 3 of #
# the License, or (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# A copy of the Lesser GNU General Public License and the GNU #
# General Public License is available at #
# <http://www.gnu.org/licenses/>. #
######################################################################
Copyright
© 2003-2017
Clifford W Fulford.
Fulford Consulting Ltd.
Regd. Co. 4250037 in England & Wales.
Regd. office 162, Edward Rd. Nottingham NG2 5GF, England, UK.
Related web sites: City Linux | Flare Support | West Bridgford | Fulford Portal | Joan Mary Fulford (Nottingham Writer) | Fulford Gallery | Amharic Interpreter | Arabic Interpreter | Tigrinya Interpreter
The layout and associated style sheets for this page are taken from the World Wide Web Consortium and used here under the W3C software licence.