Robert,
If you wish, you can go one step further and configure postfix to reject mail
-5.X.X DSN- when user is over quota instead of having the mail waiting in the
postfix mail queue for considering it a temporary delivery problem -4.X.X DSN-.
When the problem is considered temporary postfix will retry to send the e-mail
several times (sometimes for a whole week) and the sender wouldn't even know
that their message didn't get to the recipient. With a permanent error, the
sender is immediately informed that their mail couldn't make it to the
recipient's inbox.
In order to do this, you need to tell postfix and dovecot to talk together
using the LMTP protocol.
To achieve this, two things :
1/ In dovecot : configure the lmtp service and tell it that postfix will talk
to it through the /var/spool/postfix/private/dovecot-lmtp unix socket. In
conf.d/10-master.conf :
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
Here, dovecot will create the socket in postfix's chroot directory just to make
sure it can access it (in case it runs chrooted, which is the default in
debian). Should you have created the socket outside of postfix's chroot, then
postfix wouldn't have access to it. In order for dovecot to create that socket
it needs to connect as the postfix system user and group. In Debian, postfix
chroot is /var/spool/postfix/.
2/ In postfix : use the lmtp service as your transport and set the "next hop"
(postfix's jargon) to the unix dovecot-lmtp socket (that dovecot will create
for you). This is done by editing postfix's main.cf :
virtual_transport = lmtp:unix:private/dovecot-lmtp
you should also find an lmtp line in master.cf, it should read like this :
lmtp unix - - - - - lmtp
you can leave that unchanged.
If you do 1/ and 2/, dovecot will inform postfix (via the LMTP protocol) that
the user is over quota and mail should be rejected (not held in queue), postfix
will then bounce to the sender, informing them that their message couldn't be
delivered :
This is the mail system at host my.mailserver.tld
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
[...]
<[email protected]>: host
my.mailserver.tld[private/dovecot-lmtp] said: 552 5.2.2
<[email protected]> Quota exceeded (mailbox for user is full)
(in reply to end of DATA command)
-- Yassine