move the sieve script configuration to tools/mail.py
This commit is contained in:
parent
0c199b2e32
commit
7f63c199a6
|
@ -0,0 +1,8 @@
|
||||||
|
require ["regex", "fileinto", "imap4flags"];
|
||||||
|
|
||||||
|
if allof (header :regex "X-Spam-Status" "^Yes") {
|
||||||
|
setflag "\\\\Seen";
|
||||||
|
fileinto "Spam";
|
||||||
|
stop;
|
||||||
|
}
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
# Create a new email user.
|
|
||||||
##########################
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "Set up your first email account..."
|
|
||||||
read -e -i "user@`hostname`" -p "Email Address: " EMAIL_ADDR
|
|
||||||
read -e -p "Email Password (blank to skip): " EMAIL_PW
|
|
||||||
|
|
||||||
if [ ! -z "$EMAIL_PW" ]; then
|
|
||||||
echo "INSERT INTO users (email, password) VALUES ('$EMAIL_ADDR', '`doveadm pw -s SHA512-CRYPT -p $EMAIL_PW`');" \
|
|
||||||
| sqlite3 $STORAGE_ROOT/mail/users.sqlite
|
|
||||||
fi
|
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
# message over LMTP to dovecot for local delivery.
|
# message over LMTP to dovecot for local delivery.
|
||||||
|
|
||||||
# In order to move spam automatically into the Spam folder we use the dovecot sieve
|
# In order to move spam automatically into the Spam folder we use the dovecot sieve
|
||||||
# plugin. Unfortunately, each mail box needs its own sieve script set to do the
|
# plugin. The tools/mail.py tool creates the necessary sieve script for each mail
|
||||||
# filtering work. So users_update.sh must be run any time a new mail user is created.
|
# user when the mail user is created.
|
||||||
|
|
||||||
# Install packages.
|
# Install packages.
|
||||||
apt-get -q -y install spampd dovecot-sieve dovecot-antispam
|
apt-get -q -y install spampd dovecot-sieve dovecot-antispam
|
||||||
|
|
|
@ -59,6 +59,13 @@ EOF
|
||||||
. scripts/dkim.sh
|
. scripts/dkim.sh
|
||||||
. scripts/spamassassin.sh
|
. scripts/spamassassin.sh
|
||||||
. scripts/dns_update.sh
|
. scripts/dns_update.sh
|
||||||
. scripts/add_mail_user.sh
|
|
||||||
. scripts/users_update.sh
|
if [ -z `tools/mail.py user` ]; then
|
||||||
|
# The outut of "tools/mail.py user" is a list of mail users. If there
|
||||||
|
# are none configured, ask the user to configure one.
|
||||||
|
echo
|
||||||
|
echo "Let's create your first mail user."
|
||||||
|
read -e -i "user@`hostname`" -p "Email Address: " EMAIL_ADDR
|
||||||
|
tools/mail.py user add $EMAIL_ADDR # will ask for password
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
# Install dovecot sieve scripts to automatically move spam into the Spam folder.
|
|
||||||
|
|
||||||
db_path=$STORAGE_ROOT/mail/users.sqlite
|
|
||||||
|
|
||||||
for user in `echo "SELECT email FROM users;" | sqlite3 $db_path`; do
|
|
||||||
maildir=`echo $user | sed "s/\(.*\)@\(.*\)/\2\/\1/"`
|
|
||||||
|
|
||||||
# Write the sieve file to move mail classified as spam into the spam folder.
|
|
||||||
mkdir -p $STORAGE_ROOT/mail/mailboxes/$maildir; # in case user has not received any mail
|
|
||||||
cat > $STORAGE_ROOT/mail/mailboxes/$maildir/.dovecot.sieve << EOF;
|
|
||||||
require ["regex", "fileinto", "imap4flags"];
|
|
||||||
|
|
||||||
if allof (header :regex "X-Spam-Status" "^Yes") {
|
|
||||||
setflag "\\\\Seen";
|
|
||||||
fileinto "Spam";
|
|
||||||
stop;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import sys, sqlite3, subprocess
|
import sys, sqlite3, subprocess, shutil, os
|
||||||
|
|
||||||
# Load STORAGE_ROOT setting from /etc/mailinabox.conf.
|
# Load STORAGE_ROOT setting from /etc/mailinabox.conf.
|
||||||
env = { }
|
env = { }
|
||||||
|
@ -59,6 +59,16 @@ elif sys.argv[1] == "user" and sys.argv[2] in ("add", "password"):
|
||||||
if "INBOX" not in existing_mboxes: subprocess.check_call(["doveadm", "mailbox", "create", "-u", email, "-s", "INBOX"])
|
if "INBOX" not in existing_mboxes: subprocess.check_call(["doveadm", "mailbox", "create", "-u", email, "-s", "INBOX"])
|
||||||
if "Spam" not in existing_mboxes: subprocess.check_call(["doveadm", "mailbox", "create", "-u", email, "-s", "Spam"])
|
if "Spam" not in existing_mboxes: subprocess.check_call(["doveadm", "mailbox", "create", "-u", email, "-s", "Spam"])
|
||||||
|
|
||||||
|
# Create the user's sieve script to move spam into the Spam folder, and make it owned by mail.
|
||||||
|
maildirstat = os.stat(env["STORAGE_ROOT"] + "/mail/mailboxes")
|
||||||
|
(em_user, em_domain) = email.split("@", 1)
|
||||||
|
user_mail_dir = env["STORAGE_ROOT"] + ("/mail/mailboxes/%s/%s" % (em_domain, em_user))
|
||||||
|
if not os.path.exists(user_mail_dir):
|
||||||
|
os.makedirs(user_mail_dir)
|
||||||
|
os.chown(user_mail_dir, maildirstat.st_uid, maildirstat.st_gid)
|
||||||
|
shutil.copyfile("conf/dovecot_sieve.txt", user_mail_dir + "/.dovecot.sieve")
|
||||||
|
os.chown(user_mail_dir + "/.dovecot.sieve", maildirstat.st_uid, maildirstat.st_gid)
|
||||||
|
|
||||||
elif sys.argv[2] == "password":
|
elif sys.argv[2] == "password":
|
||||||
c.execute("UPDATE users SET password=? WHERE email=?", (pw, email))
|
c.execute("UPDATE users SET password=? WHERE email=?", (pw, email))
|
||||||
if c.rowcount != 1:
|
if c.rowcount != 1:
|
||||||
|
|
Loading…
Reference in New Issue