Merge branch 'master' of git.oopen.de:script/postfix
This commit is contained in:
commit
830f6d0e91
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,4 +2,5 @@
|
|||||||
*.log
|
*.log
|
||||||
conf/*.conf
|
conf/*.conf
|
||||||
conf/*.email*
|
conf/*.email*
|
||||||
|
conf/*.lst*
|
||||||
!conf/sent_userinfo_postfix.email.sample
|
!conf/sent_userinfo_postfix.email.sample
|
||||||
|
48
conf/postfix_add_mailboxes.conf.sample
Normal file
48
conf/postfix_add_mailboxes.conf.sample
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# ----------------------------------------------------
|
||||||
|
# ---
|
||||||
|
# - Parameter Settings for script 'postfix_add_mailboxes.sh'.
|
||||||
|
# ---
|
||||||
|
# ----------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# - in_file
|
||||||
|
# -
|
||||||
|
# - The file from wich the script reads the e-mail-address/password
|
||||||
|
# - kombination(s). Each line in this file must only contain
|
||||||
|
# - <emal-address> <password>
|
||||||
|
# -
|
||||||
|
# - Defaults to: in_file="${conf_dir}/mailboxes_new.lst"
|
||||||
|
# -
|
||||||
|
#in_file="${conf_dir}/mailboxes_new.lst"
|
||||||
|
|
||||||
|
# - db_name
|
||||||
|
# -
|
||||||
|
# - Database name for the postfix database
|
||||||
|
# -
|
||||||
|
# - Defaults to: db_name="postfix"
|
||||||
|
# -
|
||||||
|
#db_name="postfix"
|
||||||
|
|
||||||
|
# - db_user
|
||||||
|
# -
|
||||||
|
# - Database user with access to the postfix database ($db_name)
|
||||||
|
# -
|
||||||
|
# - Defaults to: db_user="postfix"
|
||||||
|
# -
|
||||||
|
#db_user="postfix"
|
||||||
|
|
||||||
|
# - quota
|
||||||
|
# -
|
||||||
|
# - The quota setting for the new mailboxes.
|
||||||
|
# -
|
||||||
|
# - Defaults to: quota="536870912"
|
||||||
|
# -
|
||||||
|
#quota="536870912"
|
||||||
|
|
||||||
|
# - log_file
|
||||||
|
# -
|
||||||
|
# - Where to write logging informations?
|
||||||
|
# -
|
||||||
|
# - Defaults to: log_file="${script_dir}/log/postfix_add_mailboxes.log"
|
||||||
|
# -
|
||||||
|
#log_file="${script_dir}/log/postfix_add_mailboxes.log"
|
1
log/postfix_add_mailboxes.log.20171101-1817
Normal file
1
log/postfix_add_mailboxes.log.20171101-1817
Normal file
@ -0,0 +1 @@
|
|||||||
|
[ OK ]: e-mail: ckubu-test2@oopen.de -- password: EadGl15E.%
|
@ -6,22 +6,18 @@
|
|||||||
## -
|
## -
|
||||||
## --------------------------------------
|
## --------------------------------------
|
||||||
|
|
||||||
|
script_dir="$(dirname $(realpath $0))"
|
||||||
|
conf_dir="${script_dir}/conf"
|
||||||
|
conf_file="${conf_dir}/postfix_add_mailboxes.conf"
|
||||||
|
|
||||||
## - a.mx.oopen.de
|
|
||||||
db_name=postfix
|
|
||||||
db_user=postfix
|
|
||||||
|
|
||||||
## - mailbox related
|
## --- Default Settings
|
||||||
## -
|
## ---
|
||||||
# - 2GB
|
DEFAULT_db_name="postfix"
|
||||||
#quota=2147483648
|
DEFAULT_db_user="postfix"
|
||||||
# - 512MB
|
DEFAULT_quota="536870912"
|
||||||
quota=536870912
|
DEFAULT_in_file="${conf_dir}/mailboxes_new.lst"
|
||||||
#_passwd='$E%R&T/Z(U'
|
DEFAULT_log_file="${script_dir}/log/postfix_add_mailboxes.log"
|
||||||
|
|
||||||
in_file=/root/mailboxes_new.lst
|
|
||||||
|
|
||||||
log_file=/tmp/postfix_add_mailboxes.log
|
|
||||||
|
|
||||||
## --- some functions
|
## --- some functions
|
||||||
## ---
|
## ---
|
||||||
@ -93,6 +89,76 @@ trim() {
|
|||||||
|
|
||||||
date_suffix="`date +%Y%m%d-%H%M`"
|
date_suffix="`date +%Y%m%d-%H%M`"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echononl " Loading default Configuration values from $(basename ${conf_file}).."
|
||||||
|
if [[ ! -f "$conf_file" ]]; then
|
||||||
|
echo_skipped
|
||||||
|
else
|
||||||
|
source "${conf_file}" > /dev/null 2>&1
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
echo_ok
|
||||||
|
else
|
||||||
|
echo_failed
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -n "$db_name" ]] || db_name="$DEFAULT_db_name"
|
||||||
|
[[ -n "$db_user" ]] || db_user="$DEFAULT_db_user"
|
||||||
|
[[ -n "$quota" ]] || quota="$DEFAULT_quota"
|
||||||
|
[[ -n "$in_file" ]] || in_file="$DEFAULT_in_file"
|
||||||
|
[[ -n "$log_file" ]] || log_file="$DEFAULT_log_file"
|
||||||
|
|
||||||
|
|
||||||
|
if [[ ! -f "$in_file" ]];then
|
||||||
|
fatal "File containing the email/password pairs '$in_file' does not exist !!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo -e "\033[32mSettings for script \033[37m\033[1msent_userinfo_postfix.sh\033[m"
|
||||||
|
echo ""
|
||||||
|
echo " File containing the new mailboxes and passwords.......: $in_file"
|
||||||
|
echo ""
|
||||||
|
echo " Mailbox quota to set for each new mailbox.............: $quota"
|
||||||
|
echo ""
|
||||||
|
echo " Database name for the postfix DB......................: $db_name"
|
||||||
|
echo " Database user to access the postfix DB................: $db_user"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
OK=
|
||||||
|
while [ "$OK" != "yes" -o "$OK" != "no" ] ; do
|
||||||
|
echononl "\033[1mParameters ok? [yes/no]:\033[m "
|
||||||
|
read OK
|
||||||
|
## - To lower case
|
||||||
|
OK=${OK,,}
|
||||||
|
if [ "X$OK" = "X" ]; then
|
||||||
|
echo -e "\n\t\033[33m\033[1mAn entry is required!\033[m\n"
|
||||||
|
OK=""
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [ "$OK" != "yes" -o "$OK" != "no" ] ; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo -e "\n\t\033[33m\033[1mWrong entry!\033[m\n"
|
||||||
|
done
|
||||||
|
[[ $OK = "yes" ]] || fatal "Repeat execution with different parameters."
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echononl " Create log directory '$(dirname "$log_file")'.."
|
||||||
|
if [[ ! -d "$(dirname "$log_file")" ]] ; then
|
||||||
|
mkdir "$(dirname "$log_file")"
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
echo_ok
|
||||||
|
else
|
||||||
|
echo_failed
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo_skipped
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
|
||||||
## -
|
## -
|
||||||
@ -256,6 +322,14 @@ while read email passwd ; do
|
|||||||
|
|
||||||
done < $in_file
|
done < $in_file
|
||||||
|
|
||||||
|
echononl "\tMove file '$in_file'.."
|
||||||
|
mv "$in_file" "${in_file}.$(date +%Y-%m-%d)"
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
echo_ok
|
||||||
|
else
|
||||||
|
echo_failed
|
||||||
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo -e "See \033[37m\033[1m$log_file\033[m to see the results again."
|
echo -e "See \033[37m\033[1m$log_file\033[m to see the results again."
|
||||||
echo ""
|
echo ""
|
||||||
|
@ -5,7 +5,7 @@ conf_dir="${script_dir}/conf"
|
|||||||
conf_file="${conf_dir}/sent_userinfo_postfix.conf"
|
conf_file="${conf_dir}/sent_userinfo_postfix.conf"
|
||||||
|
|
||||||
tmp_dir="$(mktemp -d)"
|
tmp_dir="$(mktemp -d)"
|
||||||
logfile="${script_dir}/sent_userinfo_postfix.$(date +%Y-%m-%d-%H%M).log"
|
logfile="${script_dir}/log/sent_userinfo_postfix.$(date +%Y-%m-%d-%H%M).log"
|
||||||
|
|
||||||
#---------------------------------------
|
#---------------------------------------
|
||||||
#-----------------------------
|
#-----------------------------
|
||||||
@ -40,6 +40,12 @@ echononl(){
|
|||||||
rm /tmp/shprompt$$
|
rm /tmp/shprompt$$
|
||||||
}
|
}
|
||||||
|
|
||||||
|
warn (){
|
||||||
|
echo ""
|
||||||
|
echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
fatal(){
|
fatal(){
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "[ \033[31m\033[1mFehler\033[m ]: $*"
|
echo -e "[ \033[31m\033[1mFehler\033[m ]: $*"
|
||||||
@ -96,6 +102,57 @@ if [[ ! -f $user_info_file ]];then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "\033[32m--\033[m"
|
||||||
|
echo ""
|
||||||
|
echo "Is this a tset-run, sending the user info to only one given address?"
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
_TEST_RUN=
|
||||||
|
while [ "$_TEST_RUN" != "yes" -o "$_TEST_RUN" != "no" ] ; do
|
||||||
|
echononl "\033[1mTest run? [yes/no]:\033[m "
|
||||||
|
read _TEST_RUN
|
||||||
|
## - To lower case
|
||||||
|
_TEST_RUN=${_TEST_RUN,,}
|
||||||
|
if [ "X$_TEST_RUN" = "X" ]; then
|
||||||
|
echo -e "\n\t\033[33m\033[1mAn entry is required! Type 'yes' or 'no'\033[m.\n"
|
||||||
|
_TEST_RUN=""
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [ "$_TEST_RUN" = "yes" -o "$_TEST_RUN" = "no" ] ; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo -e "\n\t\033[33m\033[1mWrong entry! Type 'yes' or 'no'.\033[m\n"
|
||||||
|
done
|
||||||
|
if [[ "$_TEST_RUN" = "yes" ]]; then
|
||||||
|
TEST_RUN=true
|
||||||
|
else
|
||||||
|
TEST_RUN=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if $TEST_RUN ; then
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "\033[32m--\033[m"
|
||||||
|
echo ""
|
||||||
|
echo "Give the recipient address for the test run."
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
test_email=""
|
||||||
|
while [[ "X$test_email" = "X" ]] ; do
|
||||||
|
echononl "\033[1mRecipient address for test run:\033[m "
|
||||||
|
read test_email
|
||||||
|
if [[ "X$test_email" = "X" ]] ; then
|
||||||
|
echo -e "\n\t\033[33m\033[1mAn entry is required!\033[m"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "\033[32mSettings for script \033[37m\033[1msent_userinfo_postfix.sh\033[m"
|
echo -e "\033[32mSettings for script \033[37m\033[1msent_userinfo_postfix.sh\033[m"
|
||||||
@ -107,6 +164,16 @@ echo " Mail Sender Organisation..........: $email_from_org"
|
|||||||
echo ""
|
echo ""
|
||||||
echo " Mail User.........................: $mail_user"
|
echo " Mail User.........................: $mail_user"
|
||||||
echo " Mail Group........................: $mail_group"
|
echo " Mail Group........................: $mail_group"
|
||||||
|
echo ""
|
||||||
|
echo " Test Run..........................: $TEST_RUN"
|
||||||
|
if $TEST_RUN ; then
|
||||||
|
echo " Recipient address for test run....: $test_email"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if ! $TEST_RUN ; then
|
||||||
|
warn "This is \033[1mNOT\033[m a test run. All local mailboxes will receive the user info e-mail."
|
||||||
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
OK=
|
OK=
|
||||||
@ -127,7 +194,18 @@ while [ "$OK" != "yes" -o "$OK" != "no" ] ; do
|
|||||||
done
|
done
|
||||||
[[ $OK = "yes" ]] || fatal "Repeat execution with different parameters."
|
[[ $OK = "yes" ]] || fatal "Repeat execution with different parameters."
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echononl " Create log directory '$(dirname "$logfile")'.."
|
||||||
|
if [[ ! -d "$(dirname "$logfile")" ]] ; then
|
||||||
|
mkdir "$(dirname "$logfile")"
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
echo_ok
|
||||||
|
else
|
||||||
|
echo_failed
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo_skipped
|
||||||
|
fi
|
||||||
|
|
||||||
> $logfile
|
> $logfile
|
||||||
|
|
||||||
@ -151,7 +229,14 @@ echo -e "\n\t --- Sending userinfo into all local virtual mailboxes --\n" | tee
|
|||||||
|
|
||||||
## - list of local virtual domains
|
## - list of local virtual domains
|
||||||
## -
|
## -
|
||||||
domains=`su postgres -c"psql -At -F ' ' postfix -c\"SELECT domain FROM domain WHERE domain != 'ALL' ORDER BY domain\""`
|
if $TEST_RUN ; then
|
||||||
|
if [[ ! "${test_email}" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]] ; then
|
||||||
|
fatal "The given recipient address (${test_email}) for test run does not look like a correct e-mail address!"
|
||||||
|
fi
|
||||||
|
domains="${test_email##*@}"
|
||||||
|
else
|
||||||
|
domains=`su postgres -c"psql -At -F ' ' postfix -c\"SELECT domain FROM domain WHERE domain != 'ALL' ORDER BY domain\""`
|
||||||
|
fi
|
||||||
|
|
||||||
declare -i num_dom=0;
|
declare -i num_dom=0;
|
||||||
declare -i num_mbox_failed=0;
|
declare -i num_mbox_failed=0;
|
||||||
@ -163,7 +248,11 @@ email_from_regex="$(echo ${email_from//\@/\\@})"
|
|||||||
|
|
||||||
for domain in $domains ;do
|
for domain in $domains ;do
|
||||||
echo -e "\nDOMAIN: $domain\n" | tee -a $logfile
|
echo -e "\nDOMAIN: $domain\n" | tee -a $logfile
|
||||||
local_parts=`su postgres -c"psql -At -F ' ' postfix -c\"SELECT local_part FROM mailbox WHERE domain = '$domain'\""`
|
if $TEST_RUN ; then
|
||||||
|
local_parts="${test_email%%@*}"
|
||||||
|
else
|
||||||
|
local_parts=`su postgres -c"psql -At -F ' ' postfix -c\"SELECT local_part FROM mailbox WHERE domain = '$domain'\""`
|
||||||
|
fi
|
||||||
for local_part in $local_parts ; do
|
for local_part in $local_parts ; do
|
||||||
cp "$user_info_file" "$tmp_dir"
|
cp "$user_info_file" "$tmp_dir"
|
||||||
perl -i -n -p -e "s/%email_to%/$local_part\@$domain/" "${tmp_dir}/$(basename $user_info_file)"
|
perl -i -n -p -e "s/%email_to%/$local_part\@$domain/" "${tmp_dir}/$(basename $user_info_file)"
|
||||||
@ -183,6 +272,10 @@ for domain in $domains ;do
|
|||||||
num_dom=num_dom+1
|
num_dom=num_dom+1
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if ! $TEST_RUN ; then
|
||||||
|
mv "$user_info_file" "${user_info_file}.SENT.$(date +%Y-%m-%d)"
|
||||||
|
fi
|
||||||
|
|
||||||
echo -e "\n\n----- Statistics -----\n\n\tSent mail to $num_mbox mailboxe(s) of $num_dom domain(s)" | tee -a $logfile
|
echo -e "\n\n----- Statistics -----\n\n\tSent mail to $num_mbox mailboxe(s) of $num_dom domain(s)" | tee -a $logfile
|
||||||
|
|
||||||
if [ $num_mbox_failed -gt 0 ];then
|
if [ $num_mbox_failed -gt 0 ];then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user