Attention
Check out the lightweight on-premises email archiving software developed by iRedMail team: Spider Email Archiver.
Paid Remote Upgrade Support
We offer remote upgrade support if you don't want to get your hands dirty, check the details and contact us.
Note: This fix is applicable to Dovecot-1.x, you can check Dovecot version
with command dovecot -n
.
In /etc/dovecot.conf
or /etc/dovecot/dovecot.conf
, remove the last slash
(/
) in setting sieve_dir =
like below:
# Part of file: dovecot.conf
# Original setting:
#sieve_dir = /var/vmail/sieve/%Ld/%Ln/
# Change to:
sieve_dir = /var/vmail/sieve/%Ld/%Ln # <-- Remove the last slash.
$ mysql -uroot -p
mysql> USE amavisd;
mysql> ALTER TABLE maddr ADD INDEX maddr_idx_email (email);
mysql> ALTER TABLE maddr ADD INDEX maddr_idx_domain (domain);
mysql> ALTER TABLE msgs ADD INDEX msgs_idx_content (content);
mysql> ALTER TABLE msgs ADD INDEX msgs_idx_content_time_num (content, time_num);
mysql> ALTER TABLE msgs ADD INDEX msgs_idx_mail_id (mail_id);
mysql> ALTER TABLE quarantine ADD INDEX quar_idx_mail_id (mail_id);
adm
Note: This fix is applicable to only Debian and Ubuntu.
Assign Apache daemon user to group adm
to avoid Awstats cron job issue.
# usermod -g adm www-data
There's a bug in iRedMail-0.7.3 and all earlier versions: Mailbox quota gets calculated per user and per user alias account, so both email addresses get their own mailbox quota usage. Here's the solution to fix it.
/etc/dovecot-ldap.conf
(on RHEL/CentOS/Scientific Linux) or
/etc/dovecot/dovecot-ldap.conf
(on Debian/Ubuntu/openSUSE) or
/usr/local/etc/dovecot-ldap.conf
(on FreeBSD), prepend mail=user,
in both
user_attrs =
and pass_attrs =
like below:# Part of file: dovecot-ldap.conf
# Original settings:
#pass_attrs = userPassword=password
#user_attrs = homeDirectory=home,[...OMIT OTHER SETTINGS HERE...]
# Changed:
pass_attrs = mail=user,userPassword=password
user_attrs = mail=user,homeDirectory=home,[...OMIT OTHER SETTINGS HERE...]
Restarting Dovecot service is required.
In iRedMail-0.7.3 and some earlier versions, Dovecot stores realtime mailbox
quota usage in MySQL database in two columns: mailbox.bytes
,
mailbox.messages
, if they have invalid values (e.g. empty value, non-integer
value), Dovecot will update them with two SQL commands:
DELETE FROM mailbox WHERE username='xxx@yyy.com'
INSERT INTO mailbox (username, bytes, messages) VALUES ('xxx@yyy.com', xx, xx)
As you can see, first sql command will delete iRedMail mail user, that's critial issue. So we have to store realtime mailbox quota usage in a separate MySQL table to avoid similar issues.
Below are steps to store realtime mailbox quota usage in a separate SQL table:
vmail.used_quota
to store real-time mailbox quota and
drop unused SQL columns: mailbox.bytes
, mailbox.messages
:# mysql -uroot -p
mysql> USE vmail;
mysql> CREATE TABLE IF NOT EXISTS `used_quota` (
`username` VARCHAR(255) NOT NULL,
`bytes` BIGINT NOT NULL DEFAULT 0,
`messages` BIGINT NOT NULL DEFAULT 0,
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> ALTER TABLE mailbox DROP COLUMN bytes;
mysql> ALTER TABLE mailbox DROP COLUMN messages;
Replace table = mailbox
with table = used_quota
in below config file,
so that Dovecot will store mailbox quota in new SQL table.
/etc/dovecot-used-quota.conf
, on 6.x, please update /etc/dovecot/used-quota.conf
./etc/dovecot/dovecot-used-quota.conf
./etc/dovecot/dovecot-used-quota.conf
./usr/local/etc/dovecot-used-quota.conf
.Restarting Dovecot service is required.