我正在尝试对超过配额的用户实施配额警告,Dovecot 如下这个提示。我已将以下内容添加到我的/etc/dovecot/conf.d/30-overquota.conf
(据说原件中的任何修改/etc/dovecot/dovecot.conf
都将在更新时删除)。
plugin {
quota = dict:user::file:/var/vmail/%d/%n/.quotausage
sieve=/var/vmail/%d/%n/.sieve
quota_warning = storage=50%% quota-warning 50 %u
quota_warning2 = storage=80%% quota-warning 80 %u
quota_warning3 = -storage=100%% quota-warning below %u # user is no longer over quota
}
service quota-warning {
executable = script /opt/extra-script/quota-warning.sh
user = root
unix_listener quota-warning {
user = root
mode = 0600
}
}
然后我创建了 /opt/extra-script/quota-warning.sh,将其 chmod 为 755
#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: [email protected]
Subject: Mailbox piena
La tua casella è piena al $PERCENT%. Cancellare i messaggi vecchi.
EOF
不幸的是,这并不能正常工作,因为我在 1MB 的测试邮箱中没有收到任何消息,该邮箱已满 95%(并且我的 30-overquota.conf 中的限制在第 5 行设置为 50%)。
谁能帮助我正确配置该服务?下面是dovecot -n
输出,据我所知,确认我的额外配置包含在正在运行的服务中(但没有任何预期的效果)
root@centos1670:~# dovecot -n
# 2.2.18: /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.8 (0c4ae064f307+)
# OS: Linux 2.6.32-642.15.1.el6.x86_64 x86_64 CentOS release 6.8 (Final) ext3
auth_mechanisms = plain login digest-md5 cram-md5 apop
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890&.-_@'
disable_plaintext_auth = no
first_valid_uid = 30
imap_client_workarounds = delay-newmail
imap_logout_format = rcvd=%i, sent=%o
mail_home = /var/qmail/mailnames/%Ld/%Ln
mail_location = maildir:/var/qmail/mailnames/%Ld/%Ln/Maildir
mail_log_prefix = "service=%s, user=%u, ip=[%r]. "
mail_plugins = " quota"
managesieve_logout_format = rcvd=%i, sent=%o
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate imapflags notify
namespace inbox {
inbox = yes
location =
prefix = INBOX.
separator = .
}
passdb {
driver = plesk
}
plugin {
quota = dict:user::file:/var/vmail/%d/%n/.quotausage
quota_grace = 0
quota_warning = storage=50%% quota-warning 50 %u
quota_warning2 = storage=80%% quota-warning 80 %u
quota_warning3 = -storage=100%% quota-warning below %u
sieve = ~/.dovecot.sieve
sieve_dir = ~/sieve
sieve_extensions = +notify +imapflags
}
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_logout_format = rcvd=%i, sent=%o, top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
protocols = imap pop3 sieve
service auth-worker {
group =
user =
}
service auth {
group =
unix_listener auth-userdb {
group = popuser
mode = 0600
user = popuser
}
user =
}
service quota-warning {
executable = script /opt/extra-script/quota-warning.sh
unix_listener quota-warning {
mode = 0600
user = root
}
user = root
}
ssl_cert = </etc/dovecot/private/ssl-cert-and-key.pem
ssl_key = </etc/dovecot/private/ssl-cert-and-key.pem
userdb {
args = uid=popuser gid=popuser
driver = static
}
protocol imap {
mail_plugins = " quota imap_quota"
}
protocol pop3 {
pop3_uidl_format = UID%u-%v
}
protocol lda {
mail_plugins = " quota sieve"
}
编辑:按照 Jens Erat 的建议,root@centos1670:~# doveadm quota get
实际上会产生以下输出:
Quota name Type Value Limit %
user STORAGE 0 - 0
user MESSAGE 0 - 0
这似乎表示配置有缺陷,可以通过添加诸如quota_rule = *:storage=1GB
强制配额重新计算之类的内容来修复。这样做的问题是,我所询问的 Dovecot 设置是在 Plesk 下运行的,其中可以为每个用户设置不同的邮箱大小,因此如果能够quota_rule
以参数方式定义该值,我们将不胜感激。
答案1
Dovecot 只会对用户的配额使用情况添加新的更改,除非明确要求重新计算配额(对于大型用户群和邮箱来说,该操作可能需要相当长的时间)。因此,如果您没有强制重新计算配额,Dovecot 可能不知道邮箱已超过配额限制。
使用doveadm quota get
获取当前配额数据库的转储;doveadm quota recalc
强制重新计算配额。
答案2
您的问题是由错误的配额源定义引起的。
plesk
Dovecot根本没有 passdb 驱动程序。可能的驱动程序有:passwd
、passwd-file
、ldap
、sql
和dict
。vpopmail
您必须参考 plesk 配置并找出passdb
plesk 使用的是什么类型。然后你必须在你的 dovecot 配置中添加相应的行。
一般来说,dovecot 配额的配置应该如下所示:
quota = maildir:User quota
quota_rule = Junk:ignore
quota_rule2 = Trash:storage=+100M
quota_warning = storage=90%% quota-warning 90 %u %d
quota_warning2 = storage=80%% quota-warning 80 %u %d
quota_exceeded_message = ERROR:422 - Mailbox full
这里,每用户配额与用户的凭据相关联,并与登录名/密码和存储位置一起存储在同一位置。当 dovecotdeliver
引用 passdb 时,它也会检索配额限制并将其与实际邮箱大小进行比较。
注意
您还可以注意到通知脚本quota-warning
有三个参数而不是两个 - 我分别传递了用户名和域,因为多个域由一个域提供服务,dovecot
并且很少有不同的域可能具有相同的用户,例如webmaster
或abuse
。通过准确的本地部分和域后,dovecot 可以避免歧义并将消息存储在正确的邮箱中。