Add quota support
This commit is contained in:
parent
c60e3dc842
commit
907c05299c
7 changed files with 238 additions and 1 deletions
12
README.md
12
README.md
|
@ -1,3 +1,15 @@
|
|||
Mail-in-a-Box with Quotas
|
||||
=========================
|
||||
|
||||
This is an experimental implementation of Main-in-a-box with quotas. Follow the directions below to install except
|
||||
clone from this repository instead of the official repository.
|
||||
|
||||
There is no support for quotas in control panel at the moment. To set quotas for a user you need to set the `quota`
|
||||
column for the user in the `users.sqlite` database. The `quota` column is text and allows for the `M` and `G` suffixes
|
||||
for megabytes and gigabytes respectively. No spaces should be used in the quota value (e.g. `2G` or `100M`).
|
||||
|
||||
\[BEGIN Official README]
|
||||
|
||||
Mail-in-a-Box
|
||||
=============
|
||||
|
||||
|
|
94
conf/dovecot/conf.d/20-imap.conf
Normal file
94
conf/dovecot/conf.d/20-imap.conf
Normal file
|
@ -0,0 +1,94 @@
|
|||
##
|
||||
## IMAP specific settings
|
||||
##
|
||||
|
||||
# If nothing happens for this long while client is IDLEing, move the connection
|
||||
# to imap-hibernate process and close the old imap process. This saves memory,
|
||||
# because connections use very little memory in imap-hibernate process. The
|
||||
# downside is that recreating the imap process back uses some resources.
|
||||
#imap_hibernate_timeout = 0
|
||||
|
||||
# Maximum IMAP command line length. Some clients generate very long command
|
||||
# lines with huge mailboxes, so you may need to raise this if you get
|
||||
# "Too long argument" or "IMAP command line too large" errors often.
|
||||
#imap_max_line_length = 64k
|
||||
|
||||
# IMAP logout format string:
|
||||
# %i - total number of bytes read from client
|
||||
# %o - total number of bytes sent to client
|
||||
# %{fetch_hdr_count} - Number of mails with mail header data sent to client
|
||||
# %{fetch_hdr_bytes} - Number of bytes with mail header data sent to client
|
||||
# %{fetch_body_count} - Number of mails with mail body data sent to client
|
||||
# %{fetch_body_bytes} - Number of bytes with mail body data sent to client
|
||||
# %{deleted} - Number of mails where client added \Deleted flag
|
||||
# %{expunged} - Number of mails that client expunged, which does not
|
||||
# include automatically expunged mails
|
||||
# %{autoexpunged} - Number of mails that were automatically expunged after
|
||||
# client disconnected
|
||||
# %{trashed} - Number of mails that client copied/moved to the
|
||||
# special_use=\Trash mailbox.
|
||||
# %{appended} - Number of mails saved during the session
|
||||
#imap_logout_format = in=%i out=%o
|
||||
|
||||
# Override the IMAP CAPABILITY response. If the value begins with '+',
|
||||
# add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
|
||||
#imap_capability =
|
||||
|
||||
# How long to wait between "OK Still here" notifications when client is
|
||||
# IDLEing.
|
||||
#imap_idle_notify_interval = 2 mins
|
||||
imap_idle_notify_interval=4 mins
|
||||
|
||||
# ID field names and values to send to clients. Using * as the value makes
|
||||
# Dovecot use the default value. The following fields have default values
|
||||
# currently: name, version, os, os-version, support-url, support-email.
|
||||
#imap_id_send =
|
||||
|
||||
# ID fields sent by client to log. * means everything.
|
||||
#imap_id_log =
|
||||
|
||||
# Workarounds for various client bugs:
|
||||
# delay-newmail:
|
||||
# Send EXISTS/RECENT new mail notifications only when replying to NOOP
|
||||
# and CHECK commands. Some clients ignore them otherwise, for example OSX
|
||||
# Mail (<v2.1). Outlook Express breaks more badly though, without this it
|
||||
# may show user "Message no longer in server" errors. Note that OE6 still
|
||||
# breaks even with this workaround if synchronization is set to
|
||||
# "Headers Only".
|
||||
# tb-extra-mailbox-sep:
|
||||
# Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
|
||||
# adds extra '/' suffixes to mailbox names. This option causes Dovecot to
|
||||
# ignore the extra '/' instead of treating it as invalid mailbox name.
|
||||
# tb-lsub-flags:
|
||||
# Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
|
||||
# This makes Thunderbird realize they aren't selectable and show them
|
||||
# greyed out, instead of only later giving "not selectable" popup error.
|
||||
#
|
||||
# The list is space-separated.
|
||||
#imap_client_workarounds =
|
||||
|
||||
# Host allowed in URLAUTH URLs sent by client. "*" allows all.
|
||||
#imap_urlauth_host =
|
||||
|
||||
# What happens when FETCH fails due to some internal error:
|
||||
# disconnect-immediately:
|
||||
# The FETCH is aborted immediately and the IMAP client is disconnected.
|
||||
# disconnect-after:
|
||||
# The FETCH runs for all the requested mails returning as much data as
|
||||
# possible. The client is finally disconnected without a tagged reply.
|
||||
# no-after:
|
||||
# Same as disconnect-after, but tagged NO reply is sent instead of
|
||||
# disconnecting the client. If the client attempts to FETCH the same failed
|
||||
# mail more than once, the client is disconnected. This is to avoid clients
|
||||
# from going into infinite loops trying to FETCH a broken mail.
|
||||
#imap_fetch_failure = disconnect-immediately
|
||||
|
||||
mail_plugins = $mail_plugins quota
|
||||
protocol imap {
|
||||
# Space separated list of plugins to load (default is global mail_plugins).
|
||||
mail_plugins = $mail_plugins antispam imap_quota
|
||||
|
||||
# Maximum number of IMAP connections allowed for a user from each IP address.
|
||||
# NOTE: The username is compared case-sensitively.
|
||||
#mail_max_userip_connections = 10
|
||||
}
|
84
conf/dovecot/conf.d/90-quota.conf
Normal file
84
conf/dovecot/conf.d/90-quota.conf
Normal file
|
@ -0,0 +1,84 @@
|
|||
##
|
||||
## Quota configuration.
|
||||
##
|
||||
|
||||
# Note that you also have to enable quota plugin in mail_plugins setting.
|
||||
# <doc/wiki/Quota.txt>
|
||||
|
||||
##
|
||||
## Quota limits
|
||||
##
|
||||
|
||||
# Quota limits are set using "quota_rule" parameters. To get per-user quota
|
||||
# limits, you can set/override them by returning "quota_rule" extra field
|
||||
# from userdb. It's also possible to give mailbox-specific limits, for example
|
||||
# to give additional 100 MB when saving to Trash:
|
||||
|
||||
plugin {
|
||||
#quota_rule = *:storage=1G
|
||||
#quota_rule2 = Trash:storage=+100M
|
||||
|
||||
# LDA/LMTP allows saving the last mail to bring user from under quota to
|
||||
# over quota, if the quota doesn't grow too high. Default is to allow as
|
||||
# long as quota will stay under 10% above the limit. Also allowed e.g. 10M.
|
||||
#quota_grace = 10%%
|
||||
|
||||
# Quota plugin can also limit the maximum accepted mail size.
|
||||
#quota_max_mail_size = 100M
|
||||
}
|
||||
|
||||
##
|
||||
## Quota warnings
|
||||
##
|
||||
|
||||
# You can execute a given command when user exceeds a specified quota limit.
|
||||
# Each quota root has separate limits. Only the command for the first
|
||||
# exceeded limit is excecuted, so put the highest limit first.
|
||||
# The commands are executed via script service by connecting to the named
|
||||
# UNIX socket (quota-warning below).
|
||||
# Note that % needs to be escaped as %%, otherwise "% " expands to empty.
|
||||
|
||||
plugin {
|
||||
#quota_warning = storage=95%% quota-warning 95 %u
|
||||
#quota_warning2 = storage=80%% quota-warning 80 %u
|
||||
}
|
||||
|
||||
# Example quota-warning service. The unix listener's permissions should be
|
||||
# set in a way that mail processes can connect to it. Below example assumes
|
||||
# that mail processes run as vmail user. If you use mode=0666, all system users
|
||||
# can generate quota warnings to anyone.
|
||||
#service quota-warning {
|
||||
# executable = script /usr/local/bin/quota-warning.sh
|
||||
# user = dovecot
|
||||
# unix_listener quota-warning {
|
||||
# user = vmail
|
||||
# }
|
||||
#}
|
||||
|
||||
##
|
||||
## Quota backends
|
||||
##
|
||||
|
||||
# Multiple backends are supported:
|
||||
# dirsize: Find and sum all the files found from mail directory.
|
||||
# Extremely SLOW with Maildir. It'll eat your CPU and disk I/O.
|
||||
# dict: Keep quota stored in dictionary (eg. SQL)
|
||||
# maildir: Maildir++ quota
|
||||
# fs: Read-only support for filesystem quota
|
||||
|
||||
plugin {
|
||||
quota = maildir
|
||||
#quota = dirsize:User quota
|
||||
#quota = maildir:User quota
|
||||
#quota = dict:User quota::proxy::quota
|
||||
#quota = fs:User quota
|
||||
}
|
||||
|
||||
# Multiple quota roots are also possible, for example this gives each user
|
||||
# their own 100MB quota and one shared 1GB quota within the domain:
|
||||
plugin {
|
||||
#quota = dict:user::proxy::quota
|
||||
#quota2 = dict:domain:%d:proxy::quota_domain
|
||||
#quota_rule = *:storage=102400
|
||||
#quota2_rule = *:storage=1048576
|
||||
}
|
6
conf/dovecot/dovecot-sql.conf.ext
Normal file
6
conf/dovecot/dovecot-sql.conf.ext
Normal file
|
@ -0,0 +1,6 @@
|
|||
driver = sqlite
|
||||
connect = /home/user-data/mail/users.sqlite
|
||||
default_pass_scheme = SHA512-CRYPT
|
||||
password_query = SELECT email as user, password FROM users WHERE email='%u';
|
||||
user_query = SELECT email AS user, "mail" as uid, "mail" as gid, "/home/user-data/mail/mailboxes/%d/%n" as home, '*:bytes=' || quota AS quota_rule FROM users WHERE email='%u';
|
||||
iterate_query = SELECT email AS user FROM users;
|
37
conf/roundcube/config.inc.php
Normal file
37
conf/roundcube/config.inc.php
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
/*
|
||||
* Do not edit. Written by Mail-in-a-Box. Regenerated on updates.
|
||||
*/
|
||||
$config = array();
|
||||
$config['log_dir'] = '/var/log/roundcubemail/';
|
||||
$config['temp_dir'] = '/var/tmp/roundcubemail/';
|
||||
$config['db_dsnw'] = 'sqlite:////home/user-data/mail/roundcube/roundcube.sqlite?mode=0640';
|
||||
$config['default_host'] = 'ssl://localhost';
|
||||
$config['default_port'] = 993;
|
||||
$config['imap_conn_options'] = array(
|
||||
'ssl' => array(
|
||||
'verify_peer' => false,
|
||||
'verify_peer_name' => false,
|
||||
),
|
||||
);
|
||||
$config['imap_timeout'] = 15;
|
||||
$config['smtp_server'] = 'tls://127.0.0.1';
|
||||
$config['smtp_port'] = 587;
|
||||
$config['smtp_user'] = '%u';
|
||||
$config['smtp_pass'] = '%p';
|
||||
$config['smtp_conn_options'] = array(
|
||||
'ssl' => array(
|
||||
'verify_peer' => false,
|
||||
'verify_peer_name' => false,
|
||||
),
|
||||
);
|
||||
$config['support_url'] = 'https://mailinabox.email/';
|
||||
$config['product_name'] = 'box.supplee.com Webmail';
|
||||
$config['des_key'] = 'eE4MCgtZQwgVZVBalTwPWMaC';
|
||||
$config['plugins'] = array('html5_notifier', 'archive', 'zipdownload', 'password', 'managesieve', 'jqueryui', 'persistent_login', 'carddav');
|
||||
$config['skin'] = 'larry';
|
||||
$config['login_autocomplete'] = 2;
|
||||
$config['password_charset'] = 'UTF-8';
|
||||
$config['junk_mbox'] = 'Spam';
|
||||
$config['quota_zero_as_unlimited'] = true;
|
||||
?>
|
|
@ -66,7 +66,11 @@ tools/editconf.py /etc/dovecot/conf.d/10-mail.conf \
|
|||
first_valid_uid=0
|
||||
|
||||
# Create, subscribe, and mark as special folders: INBOX, Drafts, Sent, Trash, Spam and Archive.
|
||||
cp conf/dovecot-mailboxes.conf /etc/dovecot/conf.d/15-mailboxes.conf
|
||||
cp conf/dovecot/conf.d/15-mailboxes.conf /etc/dovecot/conf.d/
|
||||
cp conf/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/
|
||||
cp conf/dovecot/conf.d/90-quota.conf /etc/dovecot/conf.d/
|
||||
cp conf/dovecot/dovecot-sql.conf.ext /etc/dovecot/
|
||||
cp conf/roundcube/config.inc.php /usr/local/lib/roundcubemail/config/
|
||||
|
||||
# ### IMAP/POP
|
||||
|
||||
|
|
Loading…
Reference in a new issue