mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
Merge pull request #1314 from gmasse/mailbox-format
New option DOVECOT_MAILBOX_FORMAT.
This commit is contained in:
commit
bcfbb0de03
|
@ -357,6 +357,13 @@ Set the message size limit for all users. If set to zero, the size will be unlim
|
|||
- drop => Drop the connection immediately with a 521 SMTP reply. Repeat this test the next time the client connects.
|
||||
- ignore => Ignore the failure of this test. Allow other tests to complete. Repeat this test the next time the client connects. This option is useful for testing and collecting statistics without blocking mail.
|
||||
|
||||
##### DOVECOT_MAILBOX_FORMAT
|
||||
|
||||
- **maildir** => uses very common Maildir format, one file contains one message
|
||||
- sdbox => (experimental) uses Dovecot high-performance mailbox format, one file contains one message
|
||||
- mdbox ==> (experimental) uses Dovecot high-performance mailbox format, multiple messages per file and multiple files per box
|
||||
|
||||
This option has been added in November 2019. Using other format than Maildir is considered as experimental in docker-mailserver and should only be used for testing purpose. For more details, please refer to [Dovecot Documentation](https://wiki2.dovecot.org/MailboxFormat).
|
||||
|
||||
## Reports
|
||||
|
||||
|
|
|
@ -216,6 +216,10 @@ DOVECOT_USER_FILTER=
|
|||
# e.g. `"(&(objectClass=PostfixBookMailAccount)(uniqueIdentifier=%n))"`
|
||||
DOVECOT_PASS_FILTER=
|
||||
|
||||
# Define the mailbox format to be used
|
||||
# default is maildir, supported values are: sdbox, mdbox, maildir
|
||||
DOVECOT_MAILBOX_FORMAT=maildir
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------------------
|
||||
# ---------------- Postgrey section -------------------------------------------------------------------------------------------
|
||||
# -----------------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -52,12 +52,12 @@ shift $((OPTIND-1))
|
|||
-e "s/"$USER",//g" $ALIAS_DATABASE
|
||||
[ $? = 0 ] && echo "$USER and potential aliases deleted." || errex "Aliases for $USER couldn't be deleted in $ALIAS_DATABASE. $?"
|
||||
if [ "$MAILDEL" != "y" ]; then
|
||||
read -p "Do you want to delete the maildir as well(all mails will be removed)?(y/n) " MAILDEL
|
||||
read -p "Do you want to delete the mailbox as well(all mails will be removed)?(y/n) " MAILDEL
|
||||
echo
|
||||
fi
|
||||
[ "$MAILDEL" != "y" ] && errex "Leaving the maildir untouched. If you want to delete it at a later point use \"sudo docker exec mail rm -R /var/mail/${MAILARR[1]}/${MAILARR[0]}\""
|
||||
[ "$MAILDEL" != "y" ] && errex "Leaving the mailbox untouched. If you want to delete it at a later point use \"sudo docker exec mail rm -R /var/mail/${MAILARR[1]}/${MAILARR[0]}\""
|
||||
rm -r -f /var/mail/${MAILARR[1]}/${MAILARR[0]}
|
||||
[ $? = 0 ] && echo "Maildir deleted." || errex "Maildir couldn't be deleted: $?"
|
||||
[ $? = 0 ] && echo "Mailbox deleted." || errex "Mailbox couldn't be deleted: $?"
|
||||
done
|
||||
|
||||
) 200<$DATABASE
|
||||
|
|
|
@ -17,6 +17,7 @@ DEFAULT_VARS["FETCHMAIL_POLL"]="${FETCHMAIL_POLL:="300"}"
|
|||
DEFAULT_VARS["ENABLE_LDAP"]="${ENABLE_LDAP:="0"}"
|
||||
DEFAULT_VARS["LDAP_START_TLS"]="${LDAP_START_TLS:="no"}"
|
||||
DEFAULT_VARS["DOVECOT_TLS"]="${DOVECOT_TLS:="no"}"
|
||||
DEFAULT_VARS["DOVECOT_MAILBOX_FORMAT"]="${DOVECOT_MAILBOX_FORMAT:="maildir"}"
|
||||
DEFAULT_VARS["ENABLE_POSTGREY"]="${ENABLE_POSTGREY:="0"}"
|
||||
DEFAULT_VARS["POSTGREY_DELAY"]="${POSTGREY_DELAY:="300"}"
|
||||
DEFAULT_VARS["POSTGREY_MAX_AGE"]="${POSTGREY_MAX_AGE:="35"}"
|
||||
|
@ -586,6 +587,18 @@ function _setup_dovecot() {
|
|||
sed -i -e 's/#ssl = yes/ssl = required/g' /etc/dovecot/conf.d/10-ssl.conf
|
||||
sed -i 's/^postmaster_address = .*$/postmaster_address = '$POSTMASTER_ADDRESS'/g' /etc/dovecot/conf.d/15-lda.conf
|
||||
|
||||
# Set mail_location according to mailbox format
|
||||
case "$DOVECOT_MAILBOX_FORMAT" in
|
||||
sdbox|mdbox|maildir )
|
||||
notify 'inf' "Dovecot $DOVECOT_MAILBOX_FORMAT format configured"
|
||||
sed -i -e 's/^mail_location = .*$/mail_location = '$DOVECOT_MAILBOX_FORMAT':\/var\/mail\/%d\/%n/g' /etc/dovecot/conf.d/10-mail.conf
|
||||
;;
|
||||
* )
|
||||
notify 'inf' "Dovecot maildir format configured (default)"
|
||||
sed -i -e 's/^mail_location = .*$/mail_location = maildir:\/var\/mail\/%d\/%n/g' /etc/dovecot/conf.d/10-mail.conf
|
||||
;;
|
||||
esac
|
||||
|
||||
# Enable Managesieve service by setting the symlink
|
||||
# to the configuration file Dovecot will actually find
|
||||
if [ "$ENABLE_MANAGESIEVE" = 1 ]; then
|
||||
|
|
45
test/mail_with_mdbox.bats
Normal file
45
test/mail_with_mdbox.bats
Normal file
|
@ -0,0 +1,45 @@
|
|||
load 'test_helper/common'
|
||||
|
||||
setup() {
|
||||
run_setup_file_if_necessary
|
||||
}
|
||||
|
||||
teardown() {
|
||||
run_teardown_file_if_necessary
|
||||
}
|
||||
|
||||
setup_file() {
|
||||
docker run -d --name mail_with_mdbox_format \
|
||||
-v "`pwd`/test/config":/tmp/docker-mailserver \
|
||||
-v "`pwd`/test/test-files":/tmp/docker-mailserver-test:ro \
|
||||
-e SASL_PASSWD="external-domain.com username:password" \
|
||||
-e ENABLE_CLAMAV=0 \
|
||||
-e ENABLE_SPAMASSASSIN=0 \
|
||||
-e DOVECOT_MAILBOX_FORMAT=mdbox \
|
||||
--cap-add=SYS_PTRACE \
|
||||
-e PERMIT_DOCKER=host \
|
||||
-e DMS_DEBUG=0 \
|
||||
-h mail.my-domain.com -t ${NAME}
|
||||
wait_for_smtp_port_in_container mail_with_mdbox_format
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
docker rm -f mail_with_mdbox_format
|
||||
}
|
||||
|
||||
@test "first" {
|
||||
skip 'only used to call setup_file from setup'
|
||||
}
|
||||
|
||||
|
||||
@test "checking dovecot mailbox format: mdbox file created" {
|
||||
run docker exec mail_with_mdbox_format /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/email-templates/existing-user1.txt"
|
||||
assert_success
|
||||
|
||||
repeat_until_success_or_timeout 30 docker exec mail_with_mdbox_format /bin/sh -c '[ $(ls /var/mail/localhost.localdomain/user1/storage/m.1 | wc -l) -eq 1 ]'
|
||||
}
|
||||
|
||||
|
||||
@test "last" {
|
||||
skip 'only used to call teardown_file from teardown'
|
||||
}
|
45
test/mail_with_sdbox.bats
Normal file
45
test/mail_with_sdbox.bats
Normal file
|
@ -0,0 +1,45 @@
|
|||
load 'test_helper/common'
|
||||
|
||||
setup() {
|
||||
run_setup_file_if_necessary
|
||||
}
|
||||
|
||||
teardown() {
|
||||
run_teardown_file_if_necessary
|
||||
}
|
||||
|
||||
setup_file() {
|
||||
docker run -d --name mail_with_sdbox_format \
|
||||
-v "`pwd`/test/config":/tmp/docker-mailserver \
|
||||
-v "`pwd`/test/test-files":/tmp/docker-mailserver-test:ro \
|
||||
-e SASL_PASSWD="external-domain.com username:password" \
|
||||
-e ENABLE_CLAMAV=0 \
|
||||
-e ENABLE_SPAMASSASSIN=0 \
|
||||
-e DOVECOT_MAILBOX_FORMAT=sdbox \
|
||||
--cap-add=SYS_PTRACE \
|
||||
-e PERMIT_DOCKER=host \
|
||||
-e DMS_DEBUG=0 \
|
||||
-h mail.my-domain.com -t ${NAME}
|
||||
wait_for_smtp_port_in_container mail_with_sdbox_format
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
docker rm -f mail_with_sdbox_format
|
||||
}
|
||||
|
||||
@test "first" {
|
||||
skip 'only used to call setup_file from setup'
|
||||
}
|
||||
|
||||
|
||||
@test "checking dovecot mailbox format: sdbox file created" {
|
||||
run docker exec mail_with_sdbox_format /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/email-templates/existing-user1.txt"
|
||||
assert_success
|
||||
|
||||
repeat_until_success_or_timeout 30 docker exec mail_with_sdbox_format /bin/sh -c '[ $(ls /var/mail/localhost.localdomain/user1/mailboxes/INBOX/dbox-Mails/u.1 | wc -l) -eq 1 ]'
|
||||
}
|
||||
|
||||
|
||||
@test "last" {
|
||||
skip 'only used to call teardown_file from teardown'
|
||||
}
|
Loading…
Reference in a new issue